{"version":3,"sources":["jsdelivr-header.js","/npm/angular2-calendar-heatmap@0.2.4/dist/calendar-heatmap.umd.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,CCNC,SAAU,EAAQ,GACC,iBAAZ,SAA0C,oBAAX,OAAyB,EAAQ,QAAS,QAAQ,iBAAkB,QAAQ,UAAW,QAAQ,aACnH,mBAAX,QAAyB,OAAO,IAAM,OAAO,CAAC,UAAW,gBAAiB,SAAU,YAAa,GACvG,EAAS,EAAO,gBAAkB,EAAO,iBAAmB,CAAC,EAAG,EAAO,cAAc,EAAO,OAAO,EAAO,GAC5G,CAJA,CAIE,MAAM,SAAW,EAAQ,EAAc,EAAO,GAAM,aAEtD,EAAS,YAAa,EAAS,EAAgB,QAAI,EAGnD,IAAI,EAAe,CACnB,OAAsB,EACtB,KAAoB,EACpB,MAAqB,EACrB,KAAoB,EACpB,IAAmB,GACnB,EAAa,EAAa,QAAU,SACpC,EAAa,EAAa,MAAQ,OAClC,EAAa,EAAa,OAAS,QACnC,EAAa,EAAa,MAAQ,OAClC,EAAa,EAAa,KAAO,MAEjC,IAAI,EAAiC,WACjC,SAAS,IACL,IAAI,EAAQ,KACZ,KAAK,MAAQ,UACb,KAAK,SAAW,EAAa,OAK7B,KAAK,WAAa,SAAU,GACxB,IAAI,EAAQ,KAAK,MAAM,EAAU,MAC7B,EAAU,KAAK,OAAO,EAAmB,KAAR,GAAiB,IAClD,EAAO,GAUX,OATI,EAAQ,IACR,GAAkB,IAAV,EAAc,UAAY,EAAQ,WAE1C,EAAU,IACV,GAAoB,IAAZ,EAAgB,WAAa,EAAU,YAErC,IAAV,GAA2B,IAAZ,IACf,EAAO,KAAK,MAAM,GAAW,YAE1B,CACX,EAIA,KAAK,aAAe,SAAU,GAAW,OAAO,CAAS,EAIzD,KAAK,UAAY,SAAU,GAAQ,OAAO,EAAO,GAAM,OAAO,UAAY,EAI1E,KAAK,WAAa,SAAU,GAAQ,OAAO,EAAK,mBAAmB,QAAS,CAAE,MAAO,SAAY,EAIjG,KAAK,UAAY,SAAU,GAAU,MAAO,QAAU,CAAQ,EAI9D,KAAK,eAAiB,SAAU,GAAQ,OAAO,EAAO,GAAM,OAAO,QAAQ,EAAI,EAI/E,KAAK,UAAY,SAAU,GAAQ,OAAO,EAAO,GAAM,OAAO,QAAU,EACxE,KAAK,mBAAqB,SAAU,GAEhC,IAAqB,EAAe,GACA,EAAO,EAAE,MAAQ,IACrD,GAAkE,UAClE,IAAqB,EAAM,EAAE,MACR,EAAO,KAAK,MAAM,EAAM,OACzC,EAAO,IACP,GAAgB,UAAqB,IAAT,EAAa,QAAU,EAAO,SAAW,iBAEzE,IAAqB,EAAQ,KAAK,OAAO,EAAc,MAAP,GAAiB,MAC7D,EAAQ,IAEJ,GADA,EAAO,EACS,4BAAwC,IAAV,EAAc,SAAW,EAAQ,UAAY,gBAG3E,UAAsB,IAAV,EAAc,SAAW,EAAQ,UAAY,iBAGjF,IAAqB,EAAU,KAAK,OAAO,EAAc,MAAP,EAAyB,KAAR,GAAiB,IAWpF,GAVI,EAAU,IAEN,GADA,EAAO,GAAK,EAAQ,EACJ,4BAA0C,IAAZ,EAAgB,WAAa,EAAU,YAAc,gBAGnF,UAAwB,IAAZ,EAAgB,WAAa,EAAU,YAAc,iBAGzF,GAAgB,SAEZ,EAAE,QAAQ,QAAU,EACpB,IAAK,IAAqB,EAAI,EAAG,EAAI,EAAE,QAAQ,OAAQ,IACnD,GAAgB,sBAAwB,EAAE,QAAQ,GAAG,KAAO,mBAC5D,GAAgB,SAAW,EAAM,WAAW,EAAE,QAAQ,GAAG,OAAS,oBAIrE,CACD,IAA0B,EAAI,EAAG,EAAI,EAAG,IACpC,GAAgB,sBAAwB,EAAE,QAAQ,GAAG,KAAO,mBAC5D,GAAgB,SAAW,EAAM,WAAW,EAAE,QAAQ,GAAG,OAAS,gBAGtE,GAAgB,SAChB,IAAqB,EAAqB,EAC1C,IAA0B,EAAI,EAAG,EAAI,EAAE,QAAQ,OAAQ,IACnD,GAAsB,EAAE,QAAQ,GAAG,MAGvC,GAAgB,4CAChB,GAAgB,SAAW,EAAM,WAAW,GAAsB,eACtE,CACA,OAAO,CACX,EACA,KAAK,iBAAmB,SAAU,GAE9B,IAAqB,EAAe,EAAO,EAAE,MAAQ,IAChC,EAAe,GAQpC,OAPA,GAAgB,gCAAkC,EAAE,MAAQ,EAAM,WAAW,EAAE,OAAS,WAAa,EAAe,UAAY,0BAChI,GAAgB,WAAa,EAAO,EAAE,MAAM,OAAO,qBAAuB,aAE1E,EAAE,QAAQ,KAAI,SAAU,GACpB,GAAgB,sBAAwB,EAAE,KAAO,mBACjD,GAAgB,SAAW,EAAM,WAAW,EAAE,OAAS,eAC3D,IACO,CACX,EACA,KAAK,kBAAoB,SAAU,GAE/B,IAAqB,EAAe,EAAO,EAAE,IAAM,IAC9B,EAAe,GAIpC,OAHA,GAAgB,+BAAiC,EAAE,GAAG,KAAO,sBAC7D,GAAgB,iBAAmB,EAAE,GAAG,MAAQ,EAAM,WAAW,EAAE,GAAG,OAAS,WAAa,EAAe,UAAY,0BACvH,GAAgB,WAAa,EAAO,EAAE,IAAI,OAAO,qBAAuB,QAE5E,EACA,KAAK,iBAAmB,SAAU,GAE9B,IAAqB,EAAe,EAAO,EAAE,IAAM,IAC9B,EAAe,GAIpC,OAHA,GAAgB,+BAAiC,EAAE,GAAG,KAAO,sBAC7D,GAAgB,iBAAmB,EAAE,GAAG,MAAQ,EAAM,WAAW,EAAE,GAAG,OAAS,WAAa,EAAe,UAAY,0BACvH,GAAgB,WAAa,EAAO,EAAE,IAAI,OAAO,qBAAuB,QAE5E,EACA,KAAK,gBAAkB,SAAU,GAE7B,IAAqB,EAAe,EAAO,EAAE,MAAQ,IAChC,EAAe,GAIpC,OAHA,GAAgB,+BAAiC,EAAE,KAAO,qBAC1D,GAAgB,iBAAmB,EAAE,MAAQ,EAAM,WAAW,EAAE,OAAS,WAAa,EAAe,UAAY,0BACjH,GAAgB,WAAa,EAAO,EAAE,MAAM,OAAO,2BAA6B,QAEpF,EACA,KAAK,QAAU,IAAI,EAAc,aACjC,KAAK,SAAW,IAAI,EAAc,aAClC,KAAK,OAAS,EACd,KAAK,YAAc,EACnB,KAAK,MAAQ,IACb,KAAK,OAAS,IACd,KAAK,UAAY,GACjB,KAAK,cAAgB,GACrB,KAAK,iBAAmB,GACxB,KAAK,oBAAsB,IAC3B,KAAK,eAAgB,EACrB,KAAK,cAAgB,IACrB,KAAK,gBAAkB,GACvB,KAAK,QAAU,CAAC,EAAa,QAC7B,KAAK,SAAW,CAAC,CACrB,CAwkDA,OAnkDA,EAAgB,UAAU,YAAc,WAC/B,KAAK,OAIV,KAAK,oBAEL,KAAK,YACT,EAMA,EAAgB,UAAU,gBAAkB,WACxC,IAAqB,EAAU,KAAK,QAAQ,cAE5C,KAAK,IAAM,EAAG,OAAO,GAChB,OAAO,OACP,KAAK,QAAS,OAEnB,KAAK,MAAQ,KAAK,IAAI,OAAO,KAC7B,KAAK,OAAS,KAAK,IAAI,OAAO,KAC9B,KAAK,QAAU,KAAK,IAAI,OAAO,KAE/B,KAAK,QAAU,EAAG,OAAO,GAAS,OAAO,OACpC,KAAK,QAAS,mBACd,MAAM,UAAW,GAEtB,KAAK,sBAEL,KAAK,WACT,EAMA,EAAgB,UAAU,iBAAmB,WACzC,IAAqB,EAAW,KAAK,QAAQ,KAAY,IAAS,SAAS,EAAG,QAAQ,QAAQ,SAAW,OAGzG,OAFgC,KAAK,MAAM,EAAW,GACX,CAE/C,EAMA,EAAgB,UAAU,oBAAsB,WAC5C,IAAqB,EAAU,KAAK,QAAQ,cAC5C,KAAK,MAAQ,EAAQ,YAAc,IAAO,IAAO,EAAQ,YACzD,KAAK,WAAc,KAAK,MAAQ,KAAK,eAAiB,KAAK,mBAAqB,KAAK,OACrF,KAAK,OAAS,KAAK,cAAgB,GAAK,KAAK,UAAY,KAAK,QAC9D,KAAK,IAAI,KAAK,QAAS,KAAK,OAAO,KAAK,SAAU,KAAK,OAC3D,EAOA,EAAgB,UAAU,SAAW,SAAU,GAC3C,KAAK,sBACC,KAAK,MAAU,KAAK,KAAK,IAAQ,KAAK,KAAK,GAAG,SAChD,KAAK,WAEb,EAMA,EAAgB,UAAU,kBAAoB,WAEtC,KAAK,KAAK,KAAO,KAAK,KAAK,GAAG,SAC9B,KAAK,KAAK,KAAI,SAAU,GACpB,IAAqB,EAAU,EAAE,QAAQ,QAAO,SAAU,EAAS,GAS/D,OARK,EAAQ,EAAQ,MAMjB,EAAQ,EAAQ,MAAM,OAAS,EAAQ,MALvC,EAAQ,EAAQ,MAAQ,CACpB,MAAS,EAAQ,OAMlB,CACX,GAAG,CAAC,GACiB,EAAmB,OAAO,KAAK,GAAS,KAAI,SAAU,GACvE,MAAO,CACH,KAAQ,EACR,MAAS,EAAQ,GAAK,MAE9B,IAIA,OAHA,EAAE,QAAU,EAAiB,MAAK,SAAU,EAAG,GAC3C,OAAO,EAAE,MAAQ,EAAE,KACvB,IACO,CACX,GAER,EAKA,EAAgB,UAAU,UAAY,WAClC,GAAK,KAAK,KAAQ,KAAK,MAAS,KAAK,SAGrC,OAAQ,KAAK,UACT,KAAK,EAAa,OACd,KAAK,qBACL,KAAK,SAAS,KAAK,CACf,SAAU,KAAK,SACf,MAAO,KAAK,KAAK,GAAG,KACpB,IAAK,KAAK,KAAK,KAAK,KAAK,OAAS,GAAG,OAEzC,MACJ,KAAK,EAAa,KACd,KAAK,mBACL,KAAK,SAAS,KAAK,CACf,SAAU,KAAK,SACf,MAAO,EAAO,KAAK,SAAS,MAAM,QAAQ,QAAQ,SAClD,IAAK,EAAO,KAAK,SAAS,MAAM,MAAM,QAAQ,WAElD,MACJ,KAAK,EAAa,MACd,KAAK,oBACL,KAAK,SAAS,KAAK,CACf,SAAU,KAAK,SACf,MAAO,EAAO,KAAK,SAAS,MAAM,QAAQ,SAAS,SACnD,IAAK,EAAO,KAAK,SAAS,MAAM,MAAM,SAAS,WAEnD,MACJ,KAAK,EAAa,KACd,KAAK,mBACL,KAAK,SAAS,KAAK,CACf,SAAU,KAAK,SACf,MAAO,EAAO,KAAK,SAAS,MAAM,QAAQ,QAAQ,SAClD,IAAK,EAAO,KAAK,SAAS,MAAM,MAAM,QAAQ,WAElD,MACJ,KAAK,EAAa,IACd,KAAK,kBACL,KAAK,SAAS,KAAK,CACf,SAAU,KAAK,SACf,MAAO,EAAO,KAAK,SAAS,MAAM,QAAQ,OAAO,SACjD,IAAK,EAAO,KAAK,SAAS,MAAM,MAAM,OAAO,WAI7D,EAMA,EAAgB,UAAU,mBAAqB,WAC3C,IAAI,EAAQ,KAER,KAAK,QAAQ,KAAK,QAAQ,OAAS,KAAO,KAAK,UAC/C,KAAK,QAAQ,KAAK,KAAK,UAG3B,IAAqB,EAAQ,EAAO,KAAK,KAAK,GAAG,MAAM,QAAQ,QAC1C,EAAM,EAAO,KAAK,KAAK,KAAK,KAAK,OAAS,GAAG,MAAM,MAAM,QAEzD,EAAO,KAAK,KACZ,EAAY,EAAG,UAAU,EAAO,GAAK,KAAI,SAAU,GACpE,IAU6B,EAVR,EAAO,EAAO,GACnC,MAAwB,CACpB,KAAQ,EACR,MAAS,EAAK,QAAO,SAAU,EAAM,GAIjC,OAHI,EAAO,EAAQ,MAAM,SAAW,EAAK,SACrC,GAAQ,EAAQ,OAEb,CACX,GAAG,GACH,SACyB,EAAU,EAAK,QAAO,SAAU,EAAS,GAC1D,GAAI,EAAO,EAAE,MAAM,SAAW,EAAK,OAC/B,IAAK,IAAqB,EAAI,EAAG,EAAI,EAAE,QAAQ,OAAQ,IAC9C,EAAQ,EAAE,QAAQ,GAAG,MAMtB,EAAQ,EAAE,QAAQ,GAAG,MAAM,OAAS,EAAE,QAAQ,GAAG,MALjD,EAAQ,EAAE,QAAQ,GAAG,MAAQ,CACzB,MAAS,EAAE,QAAQ,GAAG,OAQtC,OAAO,CACX,GAAG,CAAC,GACoC,OAAO,KAAK,GAAS,KAAI,SAAU,GACvE,MAAO,CACH,KAAQ,EACR,MAAS,EAAQ,GAAK,MAE9B,IACwB,MAAK,SAAU,EAAG,GACtC,OAAO,EAAE,MAAQ,EAAE,KACvB,KAGZ,IAEqB,EAAY,EAAG,IAAI,GAAW,SAAU,GACzD,OAAO,EAAE,KACb,IAEqB,EAAc,EAAG,UAAU,EAAO,GAAK,KAAI,SAAU,GACtE,OAAO,EAAO,EAClB,IACqB,EAAY,EAAG,YAC/B,WAAW,CAAC,EAAG,KAAK,QACpB,QAAQ,KACR,OAAO,EAAY,KAAI,SAAU,GAClC,OAAO,EAAE,MACb,KAEA,KAAK,MAAM,UAAU,oBAAoB,SACP,KAAK,MAAM,UAAU,oBAClD,KAAK,GACL,QACA,OAAO,QACP,KAAK,QAAS,wBACd,KAAK,SAAS,WACf,OAAQ,EAAM,MAAQ,EAAM,eAAiB,EAAY,OAAwB,EAAf,EAAM,MAC5E,IACK,KAAK,UAAU,WAChB,OAAO,EAAM,OAAS,EAAM,aAChC,IACK,KAAK,aAAa,SAAU,GAC7B,MAAO,aAAe,EAAU,EAAO,EAAE,MAAM,OAAO,YAAc,IAA8B,EAAxB,EAAM,gBAAsB,GAC1G,IACK,KAAK,QAAQ,SAAU,GAIxB,OAH6B,EAAG,cAC3B,MAAM,CAAC,UAAW,EAAM,OAAS,YACjC,OAAO,EAAE,IAAO,EAAW,GACzB,CAAM,EAAE,QAAU,SAC7B,IACK,GAAG,SAAS,SAAU,GACnB,EAAM,gBAIV,EAAM,eAAgB,EAEtB,EAAM,SAAW,EAEjB,EAAM,cAEN,EAAM,uBAEN,EAAM,SAAW,EAAa,KAC9B,EAAM,YACV,IACK,MAAM,UAAW,GACjB,GAAG,aAAa,SAAU,GAC3B,IAAI,EAAM,cAAV,CAOA,IAHA,IAAqB,EAAe,EAAM,mBAAmB,GAExC,EAAI,EAAU,EAAO,EAAE,MAAM,OAAO,YAAsC,EAAxB,EAAM,gBACtE,EAAM,MAAQ,EAAK,EAAM,cAAwC,EAAxB,EAAM,iBAClD,GAAK,GAET,IAAqB,EAA4B,EAAxB,EAAM,gBAE/B,EAAM,QAAQ,KAAK,GACd,MAAM,OAAQ,EAAI,MAClB,MAAM,MAAO,EAAI,MACjB,aACA,SAAS,EAAM,oBAAsB,GACrC,KAAK,EAAG,YACR,MAAM,UAAW,EAhBtB,CAiBJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,aACV,IACK,aACA,OAAM,SAAU,EAAG,GACpB,OAAO,EAAM,qBAAuB,EAAI,GAAK,EACjD,IACK,UAAS,WACV,OAAO,EAAM,mBACjB,IACK,KAAK,EAAG,YACR,MAAM,UAAW,GACjB,MAAK,SAAU,EAAY,GACxB,EAAW,SACX,IAEJ,IAAqB,EAAI,EACzB,EACK,MAAK,aAAgB,CAAG,IACxB,GAAG,OAAO,aACJ,GACH,EAAS,MAAM,KAAM,UAE7B,GACJ,IAAG,WACC,EAAM,eAAgB,CAC1B,IAEA,KAAK,OAAO,UAAU,eAAe,SACrC,KAAK,OAAO,UAAU,eACjB,KAAK,GACL,QACA,OAAO,QACP,KAAK,QAAS,oBACd,KAAK,aAAa,WACnB,OAAO,KAAK,MAAM,EAAM,cAAgB,GAAK,IACjD,IACK,MAAK,SAAU,GAAK,OAAO,EAAM,UAAU,EAAE,SAAW,IACxD,KAAK,KAAK,SAAU,GACrB,OAAO,EAAU,EAAE,OACvB,IACK,KAAK,IAAK,KAAK,cAAgB,GAC/B,GAAG,cAAc,SAAU,GACxB,EAAM,eAGV,EAAM,MAAM,UAAU,oBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,WAAW,SAAU,GAC5B,OAAQ,EAAO,EAAE,MAAM,SAAW,EAAW,OAAU,EAAI,EAC/D,GACJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,MAAM,UAAU,oBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,UAAW,EAC1B,IACK,GAAG,SAAS,SAAU,GACnB,EAAM,gBAIV,EAAM,eAAgB,EAEtB,EAAM,SAAW,CAAE,KAAM,GAEzB,EAAM,cAEN,EAAM,uBAEN,EAAM,SAAW,EAAa,KAC9B,EAAM,YACV,GACJ,EAMA,EAAgB,UAAU,iBAAmB,WACzC,IAAI,EAAQ,KAER,KAAK,QAAQ,KAAK,QAAQ,OAAS,KAAO,KAAK,UAC/C,KAAK,QAAQ,KAAK,KAAK,UAG3B,IAAqB,EAAgB,EAAO,KAAK,SAAS,MAAM,QAAQ,QACnD,EAAc,EAAO,KAAK,SAAS,MAAM,MAAM,QAE/C,EAAY,KAAK,KAAK,QAAO,SAAU,GACxD,OAAO,GAAiB,EAAO,EAAE,OAAS,EAAO,EAAE,MAAQ,CAC/D,IAEqB,EAAY,EAAG,IAAI,GAAW,SAAU,GACzD,OAAO,EAAE,KACb,IACqB,EAAQ,EAAG,cAC3B,MAAM,CAAC,UAAW,KAAK,QACvB,OAAO,EAAE,IAAO,EAAW,IAChC,KAAK,MAAM,UAAU,gBAAgB,SACrC,KAAK,MAAM,UAAU,gBAChB,KAAK,GACL,QACA,OAAO,QACP,KAAK,QAAS,oBACd,MAAM,UAAW,GACjB,KAAK,KAAK,SAAU,GACrB,OAAO,EAAM,UAAU,EAAG,IAAkB,EAAM,UAAY,EAAM,aAAa,EAAG,IAAc,CACtG,IACK,KAAK,KAAK,SAAU,GACrB,OAAO,EAAM,UAAU,IAAM,EAAM,UAAY,EAAM,aAAa,EAAG,IAAc,CACvF,IACK,KAAK,MAAM,SAAU,GACtB,OAAO,EAAM,aAAa,EAAG,EACjC,IACK,KAAK,MAAM,SAAU,GACtB,OAAO,EAAM,aAAa,EAAG,EACjC,IACK,KAAK,SAAS,SAAU,GACzB,OAAO,EAAM,aAAa,EAAG,EACjC,IACK,KAAK,UAAU,SAAU,GAC1B,OAAO,EAAM,aAAa,EAAG,EACjC,IACK,KAAK,QAAQ,SAAU,GACxB,OAAQ,EAAE,MAAQ,EAAK,EAAM,EAAE,OAAS,aAC5C,IACK,GAAG,SAAS,SAAU,GACnB,EAAM,eAIM,IAAZ,EAAE,QAGN,EAAM,eAAgB,EAEtB,EAAM,SAAW,EAEjB,EAAM,cAEN,EAAM,qBAEN,EAAM,SAAW,EAAa,IAC9B,EAAM,YACV,IACK,GAAG,aAAa,SAAU,GAC3B,IAAI,EAAM,cAAV,CAIA,IAAqB,EAAS,EAAG,OAAO,EAAG,MAAM,eAC5B,EAAS,WAC1B,EAAO,aACF,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,KAAK,KAAK,SAAU,GACrB,OAAO,EAAM,UAAU,EAAG,IAAoC,IAAlB,EAAM,UAAkB,EAAM,WAAa,CAC3F,IACK,KAAK,KAAK,SAAU,GACrB,OAAO,EAAM,UAAU,IAAwB,IAAlB,EAAM,UAAkB,EAAM,WAAa,CAC5E,IACK,KAAK,QAA2B,IAAlB,EAAM,WACpB,KAAK,SAA4B,IAAlB,EAAM,WACrB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,KAAK,KAAK,SAAU,GACrB,OAAO,EAAM,UAAU,EAAG,IAAkB,EAAM,UAAY,EAAM,aAAa,EAAG,IAAc,CACtG,IACK,KAAK,KAAK,SAAU,GACrB,OAAO,EAAM,UAAU,IAAM,EAAM,UAAY,EAAM,aAAa,EAAG,IAAc,CACvF,IACK,KAAK,SAAS,SAAU,GACzB,OAAO,EAAM,aAAa,EAAG,EACjC,IACK,KAAK,UAAU,SAAU,GAC1B,OAAO,EAAM,aAAa,EAAG,EACjC,IACK,GAAG,MAAO,EACnB,EACA,IAEA,IAAqB,EAAe,EAAM,iBAAiB,GAEtC,EAAI,EAAM,UAAU,EAAG,GAAiB,EAAM,UAAY,EAC3E,EAAM,MAAQ,EAAK,EAAM,cAAwC,EAAxB,EAAM,kBAC/C,GAAK,EAAM,cAAwC,EAAxB,EAAM,iBAErC,IAAqB,EAAI,EAAM,UAAU,GAAK,EAAM,UAAY,EAEhE,EAAM,QAAQ,KAAK,GACd,MAAM,OAAQ,EAAI,MAClB,MAAM,MAAO,EAAI,MACjB,aACA,SAAS,EAAM,oBAAsB,GACrC,KAAK,EAAG,YACR,MAAM,UAAW,EAhDtB,CAiDJ,IACK,GAAG,YAAY,WACZ,EAAM,gBAIV,EAAG,OAAO,EAAG,MAAM,eAAe,aAC7B,SAAS,EAAM,oBAAsB,GACrC,KAAK,EAAG,YACR,KAAK,KAAK,SAAU,GACrB,OAAO,EAAM,UAAU,EAAG,IAAkB,EAAM,UAAY,EAAM,aAAa,EAAG,IAAc,CACtG,IACK,KAAK,KAAK,SAAU,GACrB,OAAO,EAAM,UAAU,IAAM,EAAM,UAAY,EAAM,aAAa,EAAG,IAAc,CACvF,IACK,KAAK,SAAS,SAAU,GACzB,OAAO,EAAM,aAAa,EAAG,EACjC,IACK,KAAK,UAAU,SAAU,GAC1B,OAAO,EAAM,aAAa,EAAG,EACjC,IAEA,EAAM,cACV,IACK,aACA,OAAM,WACP,OAAQ,KAAK,IAAI,KAAK,GAAK,KAAK,UAAY,GAAK,EAAM,mBAC3D,IACK,UAAS,WACV,OAAO,EAAM,mBACjB,IACK,KAAK,EAAG,YACR,MAAM,UAAW,GACjB,MAAK,SAAU,EAAY,GACxB,EAAW,SACX,IAEJ,IAAqB,EAAI,EACzB,EACK,MAAK,aAAgB,CAAG,IACxB,GAAG,OAAO,aACJ,GACH,EAAS,MAAM,KAAM,UAE7B,GACJ,IAAG,WACC,EAAM,eAAgB,CAC1B,IAEA,IAAqB,EAAe,EAAG,WAAW,EAAc,SAAU,EAAY,UACjE,EAAa,EAAG,cAChC,MAAM,CAAC,EAAG,KAAK,QACf,OAAO,CAAC,EAAG,EAAa,SAC7B,KAAK,OAAO,UAAU,gBAAgB,SACtC,KAAK,OAAO,UAAU,gBACjB,KAAK,GACL,QACA,OAAO,QACP,KAAK,QAAS,qBACd,KAAK,aAAa,WACnB,OAAO,KAAK,MAAM,EAAM,cAAgB,GAAK,IACjD,IACK,MAAK,SAAU,GAAK,OAAO,EAAM,WAAW,EAAI,IAChD,KAAK,KAAK,SAAU,EAAG,GACxB,OAAO,EAAW,IAAM,EAAW,GAAK,EAAW,EAAI,IAAM,CACjE,IACK,KAAK,IAAK,KAAK,cAAgB,GAC/B,GAAG,cAAc,SAAU,GAC5B,IAAI,EAAM,cAAV,CAGA,IAAqB,EAAiB,EAAO,GAC7C,EAAM,MAAM,UAAU,gBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,WAAW,SAAU,GAC5B,OAAO,EAAO,EAAE,MAAM,OAAO,EAAgB,SAAW,EAAI,EAChE,GARA,CASJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,MAAM,UAAU,gBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,UAAW,EAC1B,IACK,GAAG,SAAS,SAAU,GACnB,EAAM,eAIwB,EAAM,KAAK,QAAO,SAAU,GAC1D,OAAO,EAAO,GAAG,QAAQ,UAAY,EAAO,EAAE,OAAS,EAAO,EAAE,MAAQ,EAAO,GAAG,MAAM,QAC5F,IAEgB,SAIhB,EAAM,SAAW,CAAE,KAAM,GACzB,EAAM,eAAgB,EAEtB,EAAM,cAEN,EAAM,qBAEN,EAAM,SAAW,EAAa,MAC9B,EAAM,YACV,IAEA,IAAqB,EAAa,EAAG,SAAS,IAAS,QAAQ,QAAQ,SAAU,IAAS,MAAM,QAAQ,UACnF,EAAW,EAAG,YAC9B,WAAW,CAAC,KAAK,cAAe,KAAK,SACrC,OAAO,EAAW,KAAI,SAAU,GACjC,OAAO,EAAO,GAAG,UAAU,UAC/B,KACA,KAAK,OAAO,UAAU,cAAc,SACpC,KAAK,OAAO,UAAU,cACjB,KAAK,GACL,QACA,OAAO,QACP,KAAK,QAAS,mBACd,KAAK,IAAK,KAAK,cAAgB,GAC/B,KAAK,KAAK,SAAU,EAAG,GACxB,OAAO,EAAS,EAAI,YAAc,EAAS,YAAc,IAC7D,IACK,MAAM,cAAe,QACrB,KAAK,aAAa,WACnB,OAAO,KAAK,MAAM,EAAM,cAAgB,GAAK,IACjD,IACK,MAAK,SAAU,GAAK,OAAO,EAAM,eAAe,EAAI,IACpD,GAAG,cAAc,SAAU,GAC5B,IAAI,EAAM,cAAV,CAGA,IAAqB,EAAe,EAAO,GAC3C,EAAM,MAAM,UAAU,gBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,WAAW,SAAU,GAC5B,OAAQ,EAAO,EAAE,MAAM,QAAU,EAAa,MAAS,EAAI,EAC/D,GARA,CASJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,MAAM,UAAU,gBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,UAAW,EAC1B,IAEA,KAAK,YACT,EAMA,EAAgB,UAAU,kBAAoB,WAC1C,IAAI,EAAQ,KAER,KAAK,QAAQ,KAAK,QAAQ,OAAS,KAAO,KAAK,UAC/C,KAAK,QAAQ,KAAK,KAAK,UAuB3B,IApBA,IAAqB,EAAiB,EAAO,KAAK,SAAS,MAAM,QAAQ,SACpD,EAAe,EAAO,KAAK,SAAS,MAAM,MAAM,SAEhD,EAAa,KAAK,KAAK,QAAO,SAAU,GACzD,OAAO,GAAkB,EAAO,EAAE,OAAS,EAAO,EAAE,MAAQ,CAChE,IACqB,EAAY,EAAG,IAAI,GAAY,SAAU,GAC1D,OAAO,EAAG,IAAI,EAAE,SAAS,SAAU,GAC/B,OAAQ,EAAE,KACd,GACJ,IAEqB,EAAa,EAAG,SAAS,IAAS,QAAQ,QAAQ,SAAU,IAAS,MAAM,QAAQ,UACnF,EAAW,EAAG,YAC9B,WAAW,CAAC,KAAK,cAAe,KAAK,SACrC,OAAO,EAAW,KAAI,SAAU,GACjC,OAAO,EAAO,GAAG,UAAU,UAC/B,KAEqB,EAAc,CAAC,EAAe,SAC5C,EAAe,SAAW,EAAa,QAC1C,EAAY,KAAK,EAAe,IAAI,EAAG,QAAQ,SAEnD,IAAqB,EAAY,EAAG,YAC/B,WAAW,CAAC,KAAK,cAAe,KAAK,QACrC,QAAQ,KACR,OAAO,EAAY,KAAI,SAAU,GAClC,OAAO,EAAQ,OAAO,UAC1B,KAEA,KAAK,MAAM,UAAU,qBAAqB,SAC1C,IAAqB,EAAa,KAAK,MAAM,UAAU,qBAClD,KAAK,GACL,QACA,OAAO,KACP,KAAK,QAAS,yBACd,KAAK,SAAS,WACf,OAAQ,EAAM,MAAQ,EAAM,eAAiB,EAAY,OAAwB,EAAf,EAAM,MAC5E,IACK,KAAK,UAAU,WAChB,OAAO,KAAK,IAAI,EAAS,YAAa,EAAM,iBAChD,IACK,KAAK,aAAa,SAAU,GAC7B,MAAO,aAAe,EAAU,EAAO,EAAE,MAAM,OAAO,YAAc,KAAQ,EAAS,EAAO,EAAE,MAAM,UAAU,YAAc,EAAS,YAAc,KAAQ,IAAM,GACrK,IACK,KAAK,SAAS,SAAU,GACzB,OAAO,EAAE,KACb,IACK,KAAK,QAAQ,SAAU,GACxB,OAAO,EAAE,IACb,IACK,KAAK,SAAU,GACf,GAAG,SAAS,SAAU,GACnB,EAAM,eAIM,IAAZ,EAAE,QAGN,EAAM,eAAgB,EAEtB,EAAM,SAAW,EAEjB,EAAM,cAEN,EAAM,sBAEN,EAAM,SAAW,EAAa,IAC9B,EAAM,YACV,IACqB,GAAc,KAAK,MAAQ,KAAK,eAAiB,EAAY,OAAuB,EAAd,KAAK,OAC3E,EAAY,EAAG,cAC/B,WAAW,CAAC,EAAG,IACC,EAAc,KAAK,YACxC,EAAW,UAAU,oBAChB,MAAK,SAAU,GAChB,OAAO,EAAE,OACb,IACK,QACA,OAAO,QACP,KAAK,QAAS,wBACd,KAAK,KAAK,SAAU,GACrB,IAAqB,EAAQ,SAAS,EAAG,OAAO,KAAK,YAAY,KAAK,UACjD,EAAS,SAAS,EAAG,OAAO,KAAK,YAAY,KAAK,WAGvE,OAFA,EAAU,OAAO,CAAC,EAAG,IACrB,EAAG,OAAO,KAAK,YAAY,KAAK,SAAU,EAAS,EAAU,EAAE,QACxD,CACX,IACK,KAAK,SAAS,SAAU,GACzB,IAAqB,EAAQ,SAAS,EAAG,OAAO,KAAK,YAAY,KAAK,UAEtE,OADA,EAAU,OAAO,CAAC,EAAG,IACd,KAAK,IAAK,EAAU,EAAE,OAAS,EAAc,EACxD,IACK,KAAK,UAAU,WAChB,OAAO,KAAK,IAAI,EAAS,YAAa,EAAM,iBAChD,IACK,KAAK,QAAQ,SAAU,GAIxB,OAH6B,EAAG,cAC3B,MAAM,CAAC,UAAW,EAAM,QACxB,OAAO,EAAE,IAAO,EAAW,GACzB,CAAM,EAAE,QAAU,SAC7B,IACK,MAAM,UAAW,GACjB,GAAG,aAAa,SAAU,GAC3B,IAAI,EAAM,cAAV,CASA,IALA,IAAqB,EAAO,IAAI,KAAK,EAAG,OAAO,EAAG,MAAM,cAAc,YAAY,KAAK,SAElE,EAAe,EAAM,kBAAkB,CAAC,EAAG,IAE3C,EAAI,EAAU,EAAO,GAAM,OAAO,YAAc,EAAM,gBACpE,EAAM,MAAQ,EAAK,EAAM,cAAwC,EAAxB,EAAM,iBAClD,GAAK,GAET,IAAqB,EAAI,EAAS,EAAO,GAAM,UAAU,YAAc,EAAM,gBAE7E,EAAM,QAAQ,KAAK,GACd,MAAM,OAAQ,EAAI,MAClB,MAAM,MAAO,EAAI,MACjB,aACA,SAAS,EAAM,oBAAsB,GACrC,KAAK,EAAG,YACR,MAAM,UAAW,EAlBtB,CAmBJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,aACV,IACK,aACA,OAAM,WACP,OAAQ,KAAK,IAAI,KAAK,GAAK,KAAK,UAAY,GAAK,EAAM,mBAC3D,IACK,UAAS,WACV,OAAO,EAAM,mBACjB,IACK,KAAK,EAAG,YACR,MAAM,UAAW,GACjB,MAAK,SAAU,EAAY,GACxB,EAAW,SACX,IAEJ,IAAqB,EAAI,EACzB,EACK,MAAK,aAAgB,CAAG,IACxB,GAAG,OAAO,aACJ,GACH,EAAS,MAAM,KAAM,UAE7B,GACJ,IAAG,WACC,EAAM,eAAgB,CAC1B,IAEA,KAAK,OAAO,UAAU,eAAe,SACrC,KAAK,OAAO,UAAU,eACjB,KAAK,GACL,QACA,OAAO,QACP,KAAK,QAAS,oBACd,KAAK,aAAa,WACnB,OAAO,KAAK,MAAM,EAAM,cAAgB,GAAK,IACjD,IACK,MAAK,SAAU,GAAK,OAAO,EAAM,UAAU,EAAE,OAAS,IACtD,KAAK,KAAK,SAAU,GACrB,OAAO,EAAU,EAAE,OACvB,IACK,KAAK,IAAK,KAAK,cAAgB,GAC/B,GAAG,cAAc,SAAU,GACxB,EAAM,eAGV,EAAM,MAAM,UAAU,qBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,WAAW,SAAU,GAC5B,OAAQ,EAAO,EAAE,MAAM,SAAW,EAAQ,OAAU,EAAI,EAC5D,GACJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,MAAM,UAAU,qBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,UAAW,EAC1B,IACK,GAAG,SAAS,SAAU,GACnB,EAAM,eAIuB,EAAM,KAAK,QAAO,SAAU,GACzD,OAAO,EAAE,QAAQ,SAAW,EAAO,EAAE,OAAS,EAAO,EAAE,MAAQ,EAAE,MAAM,OAC3E,IAEe,SAGf,EAAM,eAAgB,EAEtB,EAAM,SAAW,CAAE,KAAM,GAEzB,EAAM,cAEN,EAAM,sBAEN,EAAM,SAAW,EAAa,KAC9B,EAAM,YACV,IAEA,KAAK,OAAO,UAAU,cAAc,SACpC,KAAK,OAAO,UAAU,cACjB,KAAK,GACL,QACA,OAAO,QACP,KAAK,QAAS,mBACd,KAAK,IAAK,KAAK,cAAgB,GAC/B,KAAK,KAAK,SAAU,EAAG,GACxB,OAAO,EAAS,GAAK,EAAS,YAAc,IAChD,IACK,MAAM,cAAe,QACrB,KAAK,aAAa,WACnB,OAAO,KAAK,MAAM,EAAM,cAAgB,GAAK,IACjD,IACK,MAAK,SAAU,GAAK,OAAO,EAAM,eAAe,EAAI,IACpD,GAAG,cAAc,SAAU,GAC5B,IAAI,EAAM,cAAV,CAGA,IAAqB,EAAe,EAAO,GAC3C,EAAM,MAAM,UAAU,qBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,WAAW,SAAU,GAC5B,OAAQ,EAAO,EAAE,MAAM,QAAU,EAAa,MAAS,EAAI,EAC/D,GARA,CASJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,MAAM,UAAU,qBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,UAAW,EAC1B,IAEA,KAAK,YACT,EAMA,EAAgB,UAAU,iBAAmB,WACzC,IAAI,EAAQ,KAER,KAAK,QAAQ,KAAK,QAAQ,OAAS,KAAO,KAAK,UAC/C,KAAK,QAAQ,KAAK,KAAK,UAG3B,IAAqB,EAAgB,EAAO,KAAK,SAAS,MAAM,QAAQ,QACnD,EAAc,EAAO,KAAK,SAAS,MAAM,MAAM,QAE/C,EAAY,KAAK,KAAK,QAAO,SAAU,GACxD,OAAO,GAAiB,EAAO,EAAE,OAAS,EAAO,EAAE,MAAQ,CAC/D,IACqB,EAAY,EAAG,IAAI,GAAW,SAAU,GACzD,OAAO,EAAG,IAAI,EAAE,SAAS,SAAU,GAC/B,OAAQ,EAAE,KACd,GACJ,IAEqB,EAAa,EAAG,SAAS,IAAS,QAAQ,QAAQ,SAAU,IAAS,MAAM,QAAQ,UACnF,EAAW,EAAG,YAC9B,WAAW,CAAC,KAAK,cAAe,KAAK,SACrC,OAAO,EAAW,KAAI,SAAU,GACjC,OAAO,EAAO,GAAG,UAAU,UAC/B,KAEqB,EAAc,CAAC,GACf,EAAY,EAAG,YAC/B,WAAW,CAAC,KAAK,cAAe,KAAK,QACrC,QAAQ,KACR,OAAO,EAAY,KAAI,SAAU,GAClC,OAAO,EAAQ,MACnB,KAEA,KAAK,MAAM,UAAU,oBAAoB,SACzC,IAAqB,EAAa,KAAK,MAAM,UAAU,oBAClD,KAAK,GACL,QACA,OAAO,KACP,KAAK,QAAS,wBACd,KAAK,SAAS,WACf,OAAQ,EAAM,MAAQ,EAAM,eAAiB,EAAY,OAAwB,EAAf,EAAM,MAC5E,IACK,KAAK,UAAU,WAChB,OAAO,KAAK,IAAI,EAAS,YAAa,EAAM,iBAChD,IACK,KAAK,aAAa,SAAU,GAC7B,MAAO,aAAe,EAAU,EAAO,EAAE,MAAM,OAAO,YAAc,KAAQ,EAAS,EAAO,EAAE,MAAM,UAAU,YAAc,EAAS,YAAc,KAAQ,IAAM,GACrK,IACK,KAAK,SAAS,SAAU,GACzB,OAAO,EAAE,KACb,IACK,KAAK,QAAQ,SAAU,GACxB,OAAO,EAAE,IACb,IACK,KAAK,SAAU,GACf,GAAG,SAAS,SAAU,GACnB,EAAM,eAIM,IAAZ,EAAE,QAGN,EAAM,eAAgB,EAEtB,EAAM,SAAW,EAEjB,EAAM,cAEN,EAAM,qBAEN,EAAM,SAAW,EAAa,IAC9B,EAAM,YACV,IACqB,GAAc,KAAK,MAAQ,KAAK,eAAiB,EAAY,OAAuB,EAAd,KAAK,OAC3E,EAAY,EAAG,cAC/B,WAAW,CAAC,EAAG,IACC,EAAc,KAAK,YACxC,EAAW,UAAU,oBAChB,MAAK,SAAU,GAChB,OAAO,EAAE,OACb,IACK,QACA,OAAO,QACP,KAAK,QAAS,wBACd,KAAK,KAAK,SAAU,GACrB,IAAqB,EAAQ,SAAS,EAAG,OAAO,KAAK,YAAY,KAAK,UACjD,EAAS,SAAS,EAAG,OAAO,KAAK,YAAY,KAAK,WAGvE,OAFA,EAAU,OAAO,CAAC,EAAG,IACrB,EAAG,OAAO,KAAK,YAAY,KAAK,SAAU,EAAS,EAAU,EAAE,QACxD,CACX,IACK,KAAK,SAAS,SAAU,GACzB,IAAqB,EAAQ,SAAS,EAAG,OAAO,KAAK,YAAY,KAAK,UAEtE,OADA,EAAU,OAAO,CAAC,EAAG,IACd,KAAK,IAAK,EAAU,EAAE,OAAS,EAAc,EACxD,IACK,KAAK,UAAU,WAChB,OAAO,KAAK,IAAI,EAAS,YAAa,EAAM,iBAChD,IACK,KAAK,QAAQ,SAAU,GAIxB,OAH6B,EAAG,cAC3B,MAAM,CAAC,UAAW,EAAM,QACxB,OAAO,EAAE,IAAO,EAAW,GACzB,CAAM,EAAE,QAAU,SAC7B,IACK,MAAM,UAAW,GACjB,GAAG,aAAa,SAAU,GAC3B,IAAI,EAAM,cAAV,CAIA,IAAqB,EAAO,IAAI,KAAK,EAAG,OAAO,EAAG,MAAM,cAAc,YAAY,KAAK,SAElE,EAAe,EAAM,iBAAiB,CAAC,EAAG,IAE1C,EAAQ,SAAS,EAAG,OAAO,EAAG,MAAM,cAAc,YAAY,KAAK,UACxF,EAAU,OAAO,CAAC,EAAG,IAErB,IADA,IAAqB,EAAI,SAAS,EAAG,OAAO,EAAG,MAAM,eAAe,KAAK,MAAgC,EAAxB,EAAM,gBAChF,EAAM,MAAQ,EAAK,EAAM,cAAwC,EAAxB,EAAM,iBAClD,GAAK,GAET,IAAqB,EAAI,EAAS,EAAO,GAAM,UAAU,YAAc,EAAM,gBAE7E,EAAM,QAAQ,KAAK,GACd,MAAM,OAAQ,EAAI,MAClB,MAAM,MAAO,EAAI,MACjB,aACA,SAAS,EAAM,oBAAsB,GACrC,KAAK,EAAG,YACR,MAAM,UAAW,EApBtB,CAqBJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,aACV,IACK,aACA,OAAM,WACP,OAAQ,KAAK,IAAI,KAAK,GAAK,KAAK,UAAY,GAAK,EAAM,mBAC3D,IACK,UAAS,WACV,OAAO,EAAM,mBACjB,IACK,KAAK,EAAG,YACR,MAAM,UAAW,GACjB,MAAK,SAAU,EAAY,GACxB,EAAW,SACX,IAEJ,IAAqB,EAAI,EACzB,EACK,MAAK,aAAgB,CAAG,IACxB,GAAG,OAAO,aACJ,GACH,EAAS,MAAM,KAAM,UAE7B,GACJ,IAAG,WACC,EAAM,eAAgB,CAC1B,IAEA,KAAK,OAAO,UAAU,eAAe,SACrC,KAAK,OAAO,UAAU,eACjB,KAAK,GACL,QACA,OAAO,QACP,KAAK,QAAS,oBACd,KAAK,aAAa,WACnB,OAAO,KAAK,MAAM,EAAM,cAAgB,GAAK,IACjD,IACK,MAAK,SAAU,GAAK,OAAO,EAAM,UAAU,EAAE,OAAS,IACtD,KAAK,KAAK,SAAU,GACrB,OAAO,EAAU,EAAE,OACvB,IACK,KAAK,IAAK,KAAK,cAAgB,GAC/B,GAAG,cAAc,SAAU,GACxB,EAAM,eAGV,EAAM,MAAM,UAAU,oBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,WAAW,SAAU,GAC5B,OAAQ,EAAO,EAAE,MAAM,SAAW,EAAQ,OAAU,EAAI,EAC5D,GACJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,MAAM,UAAU,oBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,UAAW,EAC1B,IAEA,KAAK,OAAO,UAAU,cAAc,SACpC,KAAK,OAAO,UAAU,cACjB,KAAK,GACL,QACA,OAAO,QACP,KAAK,QAAS,mBACd,KAAK,IAAK,KAAK,cAAgB,GAC/B,KAAK,KAAK,SAAU,EAAG,GACxB,OAAO,EAAS,EAAI,YAAc,EAAS,YAAc,IAC7D,IACK,MAAM,cAAe,QACrB,KAAK,aAAa,WACnB,OAAO,KAAK,MAAM,EAAM,cAAgB,GAAK,IACjD,IACK,MAAK,SAAU,GAAK,OAAO,EAAM,eAAe,EAAI,IACpD,GAAG,cAAc,SAAU,GAC5B,IAAI,EAAM,cAAV,CAGA,IAAqB,EAAe,EAAO,GAC3C,EAAM,MAAM,UAAU,oBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,WAAW,SAAU,GAC5B,OAAQ,EAAO,EAAE,MAAM,QAAU,EAAa,MAAS,EAAI,EAC/D,GARA,CASJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,MAAM,UAAU,oBACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,UAAW,EAC1B,IAEA,KAAK,YACT,EAMA,EAAgB,UAAU,gBAAkB,WACxC,IAAI,EAAQ,KAER,KAAK,QAAQ,KAAK,QAAQ,OAAS,KAAO,KAAK,UAC/C,KAAK,QAAQ,KAAK,KAAK,UAGtB,OAAO,KAAK,KAAK,UAAU,SAC5B,KAAK,SAAW,KAAK,KAAK,KAAK,KAAK,OAAS,IAEjD,IAAqB,EAAiB,KAAK,SAAS,QAAQ,KAAI,SAAU,GAAW,OAAO,EAAQ,IAAM,IACrF,EAAe,EAAG,YAClC,WAAW,CAAC,KAAK,cAAe,KAAK,SACrC,OAAO,GACS,EAAY,EAAG,YAC/B,MAAM,CAAsB,EAArB,KAAK,cAAmB,KAAK,QACpC,OAAO,CAAC,EAAO,KAAK,SAAS,MAAM,QAAQ,OAAQ,EAAO,KAAK,SAAS,MAAM,MAAM,SACzF,KAAK,MAAM,UAAU,eAAe,SACpC,KAAK,MAAM,UAAU,eAChB,KAAK,KAAK,SAAS,SACnB,QACA,OAAO,QACP,KAAK,QAAS,mBACd,KAAK,KAAK,SAAU,GACrB,OAAO,EAAU,EAAO,EAAE,MAC9B,IACK,KAAK,KAAK,SAAU,GACrB,OAAQ,EAAa,EAAE,MAAQ,EAAa,YAAc,EAAK,EACnE,IACK,KAAK,SAAS,SAAU,GACzB,IAAqB,EAAM,EAAU,EAAG,WAAW,OAAO,EAAO,EAAE,MAAM,SAAU,EAAE,QACrF,OAAO,KAAK,IAAK,EAAM,EAAU,EAAO,EAAE,OAAS,EACvD,IACK,KAAK,UAAU,WAChB,OAAO,KAAK,IAAI,EAAa,YAAa,EAAM,iBACpD,IACK,KAAK,QAAQ,WACd,OAAO,EAAM,KACjB,IACK,MAAM,UAAW,GACjB,GAAG,aAAa,SAAU,GAC3B,IAAI,EAAM,cAAV,CAOA,IAHA,IAAqB,EAAe,EAAM,gBAAgB,GAErC,EAAc,IAAV,EAAE,MAAc,MAAiB,EAAU,EAAO,EAAE,OACtE,EAAM,MAAQ,EAAK,EAAM,cAAwC,EAAxB,EAAM,iBAClD,GAAK,GAET,IAAqB,EAAI,EAAa,EAAE,MAAQ,EAAM,gBAEtD,EAAM,QAAQ,KAAK,GACd,MAAM,OAAQ,EAAI,MAClB,MAAM,MAAO,EAAI,MACjB,aACA,SAAS,EAAM,oBAAsB,GACrC,KAAK,EAAG,YACR,MAAM,UAAW,EAhBtB,CAiBJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,aACV,IACK,GAAG,SAAS,SAAU,GACnB,EAAM,SACN,EAAM,QAAQ,KAAK,EAE3B,IACK,aACA,OAAM,WACP,OAAQ,KAAK,IAAI,KAAK,GAAK,KAAK,UAAY,GAAK,EAAM,mBAC3D,IACK,UAAS,WACV,OAAO,EAAM,mBACjB,IACK,KAAK,EAAG,YACR,MAAM,UAAW,IACjB,MAAK,SAAU,EAAY,GACxB,EAAW,SACX,IAEJ,IAAqB,EAAI,EACzB,EACK,MAAK,aAAgB,CAAG,IACxB,GAAG,OAAO,aACJ,GACH,EAAS,MAAM,KAAM,UAE7B,GACJ,IAAG,WACC,EAAM,eAAgB,CAC1B,IAEA,IAAqB,EAAa,EAAG,UAAU,EAAO,KAAK,SAAS,MAAM,QAAQ,OAAO,SAAU,EAAO,KAAK,SAAS,MAAM,MAAM,OAAO,UACtH,EAAY,EAAG,YAC/B,MAAM,CAAsB,EAArB,KAAK,cAAmB,KAAK,QACpC,OAAO,CAAC,EAAG,EAAW,SAC3B,KAAK,OAAO,UAAU,eAAe,SACrC,KAAK,OAAO,UAAU,eACjB,KAAK,GACL,QACA,OAAO,QACP,KAAK,QAAS,oBACd,KAAK,aAAa,WACnB,OAAO,KAAK,MAAM,EAAM,cAAgB,GAAK,IACjD,IACK,MAAK,SAAU,GAAK,OAAO,EAAM,UAAU,EAAI,IAC/C,KAAK,KAAK,SAAU,EAAG,GACxB,OAAO,EAAU,EACrB,IACK,KAAK,IAAK,KAAK,cAAgB,GAC/B,GAAG,cAAc,SAAU,GAC5B,IAAI,EAAM,cAAV,CAGA,IAAqB,EAAW,EAAU,EAAO,IACjD,EAAM,MAAM,UAAU,eACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,WAAW,SAAU,GAC5B,IAAqB,EAAQ,EAAU,EAAO,EAAE,OAC3B,EAAM,EAAU,EAAO,EAAE,MAAM,IAAI,EAAE,MAAO,YACjE,OAAQ,GAAY,GAAS,GAAY,EAAO,EAAI,EACxD,GAVA,CAWJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,MAAM,UAAU,eACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,UAAW,GAC1B,IAEA,IAAqB,EAAgB,KAAK,cAC1C,KAAK,OAAO,UAAU,kBAAkB,SACxC,KAAK,OAAO,UAAU,kBACjB,KAAK,GACL,QACA,OAAO,QACP,KAAK,QAAS,uBACd,KAAK,IAAK,KAAK,QACf,KAAK,KAAK,SAAU,GACrB,OAAO,EAAa,GAAK,EAAa,YAAc,CACxD,IACK,KAAK,cAAc,WACpB,OAAO,EAAa,WACxB,IACK,MAAM,cAAe,QACrB,KAAK,aAAa,WACnB,OAAO,KAAK,MAAM,EAAM,cAAgB,GAAK,IACjD,IACK,MAAK,SAAU,GAAK,OAAO,EAAM,aAAa,EAAI,IAClD,MAAK,SAAU,EAAG,GAEnB,IADA,IAAqB,EAAM,EAAG,OAAO,MAAwB,EAAc,EAAI,OAAO,wBAA0C,EAAO,EAAI,OACpI,EAA+B,IAAhB,GAAwB,EAAK,OAAS,GACxD,EAAO,EAAK,MAAM,GAAI,GACtB,EAAI,KAAK,EAAO,OAChB,EAAc,EAAI,OAAO,uBAEjC,IACK,GAAG,cAAc,SAAU,GACxB,EAAM,eAGV,EAAM,MAAM,UAAU,eACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,WAAW,SAAU,GAC5B,OAAQ,EAAE,OAAS,EAAW,EAAI,EACtC,GACJ,IACK,GAAG,YAAY,WACZ,EAAM,eAGV,EAAM,MAAM,UAAU,eACjB,aACA,SAAS,EAAM,qBACf,KAAK,EAAG,YACR,MAAM,UAAW,GAC1B,IAEA,KAAK,YACT,EAQA,EAAgB,UAAU,UAAY,SAAU,EAAG,GAC/C,IAAqB,EAAO,EAAO,EAAE,MAChB,EAAW,KAAK,QAAQ,GAAQ,EAAO,GAAe,QAAQ,SAAW,OAE9F,OADgC,KAAK,MAAM,EAAW,IACnC,KAAK,UAAY,KAAK,QAAU,KAAK,aAC5D,EAOA,EAAgB,UAAU,UAAY,SAAU,GAC5C,OAAO,KAAK,cAAgB,EAAO,EAAE,MAAM,WAAa,KAAK,UAAY,KAAK,OAClF,EAQA,EAAgB,UAAU,aAAe,SAAU,EAAG,GAClD,OAAI,GAAU,EACH,KAAK,UAEQ,IAAjB,KAAK,UAAoB,KAAK,UAAY,EAAE,MAAQ,EAAU,GACzE,EAMA,EAAgB,UAAU,WAAa,WACnC,IAAI,EAAQ,KACZ,KAAK,QAAQ,UAAU,WAAW,SAClC,IAAqB,EAAS,KAAK,QAAQ,OAAO,KAC7C,KAAK,QAAS,sBACd,MAAM,UAAW,GACjB,GAAG,SAAS,WACb,IAAI,EAAM,cAAV,CAMA,OAFA,EAAM,eAAgB,EAEd,EAAM,UACV,KAAK,EAAa,KACd,EAAM,qBACN,MACJ,KAAK,EAAa,MACd,EAAM,sBACN,MACJ,KAAK,EAAa,KACd,EAAM,qBACN,MACJ,KAAK,EAAa,IACd,EAAM,oBAId,EAAM,QAAQ,MACd,EAAM,SAAW,EAAM,QAAQ,MAC/B,EAAM,WArBN,CAsBJ,IACA,EAAO,OAAO,UACT,KAAK,KAAM,KAAK,cAAgB,MAChC,KAAK,KAAM,KAAK,cAAgB,KAChC,KAAK,IAAK,KAAK,UAAY,GAChC,EAAO,OAAO,QACT,KAAK,IAAK,KAAK,cAAgB,MAC/B,KAAK,IAAK,KAAK,cAAgB,KAC/B,KAAK,MAAM,WACZ,OAAO,KAAK,MAAM,EAAM,MAAQ,KAAO,CAC3C,IACK,KAAK,aAAa,WACnB,OAAO,KAAK,MAAM,EAAM,cAAgB,GAAK,IACjD,IACK,KAAK,YACV,EAAO,aACF,SAAS,KAAK,qBACd,KAAK,EAAG,YACR,MAAM,UAAW,EAC1B,EAMA,EAAgB,UAAU,qBAAuB,WAC7C,KAAK,MAAM,UAAU,oBAChB,aACA,SAAS,KAAK,qBACd,KAAK,EAAG,YACR,MAAM,UAAW,GACjB,SACL,KAAK,OAAO,UAAU,eAAe,QACzC,EAMA,EAAgB,UAAU,mBAAqB,WAC3C,KAAK,MAAM,UAAU,gBAChB,aACA,SAAS,KAAK,qBACd,KAAK,EAAG,YACR,MAAM,UAAW,GACjB,SACL,KAAK,OAAO,UAAU,cAAc,SACpC,KAAK,OAAO,UAAU,gBAAgB,SACtC,KAAK,gBACT,EAMA,EAAgB,UAAU,oBAAsB,WAC5C,IAAI,EAAQ,KACZ,KAAK,MAAM,UAAU,qBAAqB,UAAU,oBAC/C,aACA,SAAS,KAAK,qBACd,KAAK,EAAG,YACR,MAAM,UAAW,GACjB,KAAK,KAAK,SAAU,EAAG,GACxB,OAAQ,EAAI,GAAM,GAAM,EAAM,MAAQ,EAAI,EAAM,MAAQ,CAC5D,IACK,SACL,KAAK,OAAO,UAAU,cAAc,SACpC,KAAK,OAAO,UAAU,eAAe,SACrC,KAAK,gBACT,EAMA,EAAgB,UAAU,mBAAqB,WAC3C,IAAI,EAAQ,KACZ,KAAK,MAAM,UAAU,oBAAoB,UAAU,oBAC9C,aACA,SAAS,KAAK,qBACd,KAAK,EAAG,YACR,MAAM,UAAW,GACjB,KAAK,KAAK,SAAU,EAAG,GACxB,OAAQ,EAAI,GAAM,GAAM,EAAM,MAAQ,EAAI,EAAM,MAAQ,CAC5D,IACK,SACL,KAAK,OAAO,UAAU,cAAc,SACpC,KAAK,OAAO,UAAU,eAAe,SACrC,KAAK,gBACT,EAMA,EAAgB,UAAU,kBAAoB,WAC1C,IAAI,EAAQ,KACZ,KAAK,MAAM,UAAU,eAChB,aACA,SAAS,KAAK,qBACd,KAAK,EAAG,YACR,MAAM,UAAW,GACjB,KAAK,KAAK,SAAU,EAAG,GACxB,OAAQ,EAAI,GAAM,GAAM,EAAM,MAAQ,EAAI,EAAM,MAAQ,CAC5D,IACK,SACL,KAAK,OAAO,UAAU,eAAe,SACrC,KAAK,OAAO,UAAU,kBAAkB,SACxC,KAAK,gBACT,EAMA,EAAgB,UAAU,YAAc,WACpC,KAAK,QAAQ,aACR,SAAS,KAAK,oBAAsB,GACpC,KAAK,EAAG,YACR,MAAM,UAAW,EAC1B,EAMA,EAAgB,UAAU,eAAiB,WACvC,KAAK,QAAQ,UAAU,WAClB,aACA,SAAS,KAAK,qBACd,KAAK,EAAG,YACR,MAAM,UAAW,GACjB,QACT,EAEA,EAAgB,WAAa,CACzB,CAAE,KAAM,EAAc,UAAW,KAAM,CAAC,CAC5B,SAAU,mBACV,SAAU,oBACV,OAAQ,CAAC,k9CAMzB,EAAgB,eAAiB,WAAc,MAAO,EAAI,EAC1D,EAAgB,eAAiB,CAC7B,QAAW,CAAC,CAAE,KAAM,EAAc,UAAW,KAAM,CAAC,UACpD,KAAQ,CAAC,CAAE,KAAM,EAAc,QAC/B,MAAS,CAAC,CAAE,KAAM,EAAc,QAChC,SAAY,CAAC,CAAE,KAAM,EAAc,QACnC,WAAc,CAAC,CAAE,KAAM,EAAc,QACrC,aAAgB,CAAC,CAAE,KAAM,EAAc,QACvC,UAAa,CAAC,CAAE,KAAM,EAAc,QACpC,WAAc,CAAC,CAAE,KAAM,EAAc,QACrC,UAAa,CAAC,CAAE,KAAM,EAAc,QACpC,eAAkB,CAAC,CAAE,KAAM,EAAc,QACzC,UAAa,CAAC,CAAE,KAAM,EAAc,QACpC,mBAAsB,CAAC,CAAE,KAAM,EAAc,QAC7C,iBAAoB,CAAC,CAAE,KAAM,EAAc,QAC3C,kBAAqB,CAAC,CAAE,KAAM,EAAc,QAC5C,iBAAoB,CAAC,CAAE,KAAM,EAAc,QAC3C,gBAAmB,CAAC,CAAE,KAAM,EAAc,QAC1C,QAAW,CAAC,CAAE,KAAM,EAAc,SAClC,SAAY,CAAC,CAAE,KAAM,EAAc,SACnC,SAAY,CAAC,CAAE,KAAM,EAAc,aAAc,KAAM,CAAC,gBAAiB,CAAC,cAEvE,CACX,CAtuDoC,GAwuDpC,EAAQ,aAAe,EACvB,EAAQ,gBAAkB,EAE1B,OAAO,eAAe,EAAS,aAAc,CAAE,OAAO,GAErD","file":"/npm/angular2-calendar-heatmap@0.2.4/dist/calendar-heatmap.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/angular2-calendar-heatmap@0.2.4/dist/calendar-heatmap.umd.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('moment'), require('d3/index')) :\n\ttypeof define === 'function' && define.amd ? define(['exports', '@angular/core', 'moment', 'd3/index'], factory) :\n\t(factory((global.CalendarHeatmap = global.CalendarHeatmap || {}),global._angular_core,global.moment,global.d3));\n}(this, (function (exports,_angular_core,moment,d3) { 'use strict';\n\nmoment = 'default' in moment ? moment['default'] : moment;\n\n// Import dependencies\nvar OverviewType = {};\nOverviewType.global = 0;\nOverviewType.year = 1;\nOverviewType.month = 2;\nOverviewType.week = 3;\nOverviewType.day = 4;\nOverviewType[OverviewType.global] = \"global\";\nOverviewType[OverviewType.year] = \"year\";\nOverviewType[OverviewType.month] = \"month\";\nOverviewType[OverviewType.week] = \"week\";\nOverviewType[OverviewType.day] = \"day\";\n\nvar CalendarHeatmap = /** @class */ (function () {\n    function CalendarHeatmap() {\n        var _this = this;\n        this.color = '#ff4500';\n        this.overview = OverviewType.global;\n        /**\n         * Helper function to convert seconds to a human readable format\n         * @param seconds Integer\n         */\n        this.formatTime = function (seconds) {\n            var hours = Math.floor(seconds / 3600);\n            var minutes = Math.floor((seconds - (hours * 3600)) / 60);\n            var time = '';\n            if (hours > 0) {\n                time += hours === 1 ? '1 hour ' : hours + ' hours ';\n            }\n            if (minutes > 0) {\n                time += minutes === 1 ? '1 minute' : minutes + ' minutes';\n            }\n            if (hours === 0 && minutes === 0) {\n                time = Math.round(seconds) + ' seconds';\n            }\n            return time;\n        };\n        /**\n         * Function for project label\n         */\n        this.projectLabel = function (project) { return project; };\n        /**\n         * Function for year label\n         */\n        this.yearLabel = function (date) { return moment(date).year().toString(); };\n        /**\n         * Function for month label\n         */\n        this.monthLabel = function (date) { return date.toLocaleDateString('en-us', { month: 'short' }); };\n        /**\n         * Function for week label\n         */\n        this.weekLabel = function (number) { return 'Week ' + number; };\n        /**\n         * Function for day of week label\n         */\n        this.dayOfWeekLabel = function (date) { return moment(date).format('dddd')[0]; };\n        /**\n         * Function for time label\n         */\n        this.timeLabel = function (date) { return moment(date).format('HH:mm'); };\n        this.buildGlobalTooltip = function (d) {\n            // Construct tooltip\n            var /** @type {?} */ tooltip_html = '';\n            var /** @type {?} */ isDateFuture = moment(d.date) > moment();\n            tooltip_html += '<div><span><strong>Total time ' + isDateFuture ? 'planned' : 'tracked' + ':</strong></span>';\n            var /** @type {?} */ sec = d.total;\n            var /** @type {?} */ days = Math.floor(sec / 86400);\n            if (days > 0) {\n                tooltip_html += '<span>' + (days === 1 ? '1 day' : days + ' days') + '</span></div>';\n            }\n            var /** @type {?} */ hours = Math.floor((sec - (days * 86400)) / 3600);\n            if (hours > 0) {\n                if (days > 0) {\n                    tooltip_html += '<div><span></span><span>' + (hours === 1 ? '1 hour' : hours + ' hours') + '</span></div>';\n                }\n                else {\n                    tooltip_html += '<span>' + (hours === 1 ? '1 hour' : hours + ' hours') + '</span></div>';\n                }\n            }\n            var /** @type {?} */ minutes = Math.floor((sec - (days * 86400) - (hours * 3600)) / 60);\n            if (minutes > 0) {\n                if (days > 0 || hours > 0) {\n                    tooltip_html += '<div><span></span><span>' + (minutes === 1 ? '1 minute' : minutes + ' minutes') + '</span></div>';\n                }\n                else {\n                    tooltip_html += '<span>' + (minutes === 1 ? '1 minute' : minutes + ' minutes') + '</span></div>';\n                }\n            }\n            tooltip_html += '<br />';\n            // Add summary to the tooltip\n            if (d.summary.length <= 5) {\n                for (var /** @type {?} */ i = 0; i < d.summary.length; i++) {\n                    tooltip_html += '<div><span><strong>' + d.summary[i].name + '</strong></span>';\n                    tooltip_html += '<span>' + _this.formatTime(d.summary[i].value) + '</span></div>';\n                }\n                \n            }\n            else {\n                for (var /** @type {?} */ i = 0; i < 5; i++) {\n                    tooltip_html += '<div><span><strong>' + d.summary[i].name + '</strong></span>';\n                    tooltip_html += '<span>' + _this.formatTime(d.summary[i].value) + '</span></div>';\n                }\n                \n                tooltip_html += '<br />';\n                var /** @type {?} */ other_projects_sum = 0;\n                for (var /** @type {?} */ i = 5; i < d.summary.length; i++) {\n                    other_projects_sum = +d.summary[i].value;\n                }\n                \n                tooltip_html += '<div><span><strong>Other:</strong></span>';\n                tooltip_html += '<span>' + _this.formatTime(other_projects_sum) + '</span></div>';\n            }\n            return tooltip_html;\n        };\n        this.buildYearTooltip = function (d) {\n            // Construct tooltip\n            var /** @type {?} */ isDateFuture = moment(d.date) > moment();\n            var /** @type {?} */ tooltip_html = '';\n            tooltip_html += '<div class=\"header\"><strong>' + (d.total ? _this.formatTime(d.total) : 'No time') + isDateFuture ? 'planned' : 'tracked' + ' </strong></div>';\n            tooltip_html += '<div>on ' + moment(d.date).format('dddd, MMM Do YYYY') + '</div><br>';\n            // Add summary to the tooltip\n            d.summary.map(function (d) {\n                tooltip_html += '<div><span><strong>' + d.name + '</strong></span>';\n                tooltip_html += '<span>' + _this.formatTime(d.value) + '</span></div>';\n            });\n            return tooltip_html;\n        };\n        this.buildMonthTooltip = function (d) {\n            // Construct tooltip\n            var /** @type {?} */ isDateFuture = moment(d[1]) > moment();\n            var /** @type {?} */ tooltip_html = '';\n            tooltip_html += '<div class=\"header\"><strong>' + d[0].name + '</strong></div><br>';\n            tooltip_html += '<div><strong>' + (d[0].value ? _this.formatTime(d[0].value) : 'No time') + isDateFuture ? 'planned' : 'tracked' + ' </strong></div>';\n            tooltip_html += '<div>on ' + moment(d[1]).format('dddd, MMM Do YYYY') + '</div>';\n            return tooltip_html;\n        };\n        this.buildWeekTooltip = function (d) {\n            // Construct tooltip\n            var /** @type {?} */ isDateFuture = moment(d[1]) > moment();\n            var /** @type {?} */ tooltip_html = '';\n            tooltip_html += '<div class=\"header\"><strong>' + d[0].name + '</strong></div><br>';\n            tooltip_html += '<div><strong>' + (d[0].value ? _this.formatTime(d[0].value) : 'No time') + isDateFuture ? 'planned' : 'tracked' + ' </strong></div>';\n            tooltip_html += '<div>on ' + moment(d[1]).format('dddd, MMM Do YYYY') + '</div>';\n            return tooltip_html;\n        };\n        this.buildDayTooltip = function (d) {\n            // Construct tooltip\n            var /** @type {?} */ isDateFuture = moment(d.date) > moment();\n            var /** @type {?} */ tooltip_html = '';\n            tooltip_html += '<div class=\"header\"><strong>' + d.name + '</strong><div><br>';\n            tooltip_html += '<div><strong>' + (d.value ? _this.formatTime(d.value) : 'No time') + isDateFuture ? 'planned' : 'tracked' + ' </strong></div>';\n            tooltip_html += '<div>on ' + moment(d.date).format('dddd, MMM Do YYYY HH:mm') + '</div>';\n            return tooltip_html;\n        };\n        this.handler = new _angular_core.EventEmitter();\n        this.onChange = new _angular_core.EventEmitter();\n        this.gutter = 5;\n        this.item_gutter = 1;\n        this.width = 1000;\n        this.height = 200;\n        this.item_size = 10;\n        this.label_padding = 40;\n        this.max_block_height = 20;\n        this.transition_duration = 500;\n        this.in_transition = false;\n        this.tooltip_width = 250;\n        this.tooltip_padding = 15;\n        this.history = [OverviewType.global];\n        this.selected = {};\n    }\n    /**\n     * Check if data is available\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.ngOnChanges = function () {\n        if (!this.data) {\n            return;\n        }\n        // Update data summaries\n        this.updateDataSummary();\n        // Draw the chart\n        this.drawChart();\n    };\n    \n    /**\n     * Get hold of the root element and append our svg\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.ngAfterViewInit = function () {\n        var /** @type {?} */ element = this.element.nativeElement;\n        // Initialize svg element\n        this.svg = d3.select(element)\n            .append('svg')\n            .attr('class', 'svg');\n        // Initialize main svg elements\n        this.items = this.svg.append('g');\n        this.labels = this.svg.append('g');\n        this.buttons = this.svg.append('g');\n        // Add tooltip to the same element as main svg\n        this.tooltip = d3.select(element).append('div')\n            .attr('class', 'heatmap-tooltip')\n            .style('opacity', 0);\n        // Calculate chart dimensions\n        this.calculateDimensions();\n        // Draw the chart\n        this.drawChart();\n    };\n    \n    /**\n     * Utility function to get number of complete weeks in a year\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.getNumberOfWeeks = function () {\n        var /** @type {?} */ dayIndex = Math.round((+moment() - +moment().subtract(1, 'year').startOf('week')) / 86400000);\n        var /** @type {?} */ colIndex = Math.trunc(dayIndex / 7);\n        var /** @type {?} */ numWeeks = colIndex + 1;\n        return numWeeks;\n    };\n    \n    /**\n     * Utility funciton to calculate chart dimensions\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.calculateDimensions = function () {\n        var /** @type {?} */ element = this.element.nativeElement;\n        this.width = element.clientWidth < 1000 ? 1000 : element.clientWidth;\n        this.item_size = ((this.width - this.label_padding) / this.getNumberOfWeeks() - this.gutter);\n        this.height = this.label_padding + 7 * (this.item_size + this.gutter);\n        this.svg.attr('width', this.width).attr('height', this.height);\n    };\n    \n    /**\n     * Recalculate dimensions on window resize events\n     * @param {?} event\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.onResize = function (event$$1) {\n        this.calculateDimensions();\n        if (!!this.data && !!this.data[0] && !!this.data[0].summary) {\n            this.drawChart();\n        }\n    };\n    \n    /**\n     * Helper function to check for data summary\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.updateDataSummary = function () {\n        // Get daily summary if that was not provided\n        if (this.data[0] && !this.data[0].summary) {\n            this.data.map(function (d) {\n                var /** @type {?} */ summary = d.details.reduce(function (uniques, project) {\n                    if (!uniques[project.name]) {\n                        uniques[project.name] = {\n                            'value': project.value\n                        };\n                    }\n                    else {\n                        uniques[project.name].value += project.value;\n                    }\n                    return uniques;\n                }, {});\n                var /** @type {?} */ unsorted_summary = Object.keys(summary).map(function (key) {\n                    return {\n                        'name': key,\n                        'value': summary[key].value\n                    };\n                });\n                d.summary = unsorted_summary.sort(function (a, b) {\n                    return b.value - a.value;\n                });\n                return d;\n            });\n        }\n    };\n    /**\n     * Draw the chart based on the current overview type\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.drawChart = function () {\n        if (!this.svg || !this.data || !this.selected) {\n            return;\n        }\n        switch (this.overview) {\n            case OverviewType.global:\n                this.drawGlobalOverview();\n                this.onChange.emit({\n                    overview: this.overview,\n                    start: this.data[0].date,\n                    end: this.data[this.data.length - 1].date,\n                });\n                break;\n            case OverviewType.year:\n                this.drawYearOverview();\n                this.onChange.emit({\n                    overview: this.overview,\n                    start: moment(this.selected.date).startOf('year').toDate(),\n                    end: moment(this.selected.date).endOf('year').toDate(),\n                });\n                break;\n            case OverviewType.month:\n                this.drawMonthOverview();\n                this.onChange.emit({\n                    overview: this.overview,\n                    start: moment(this.selected.date).startOf('month').toDate(),\n                    end: moment(this.selected.date).endOf('month').toDate(),\n                });\n                break;\n            case OverviewType.week:\n                this.drawWeekOverview();\n                this.onChange.emit({\n                    overview: this.overview,\n                    start: moment(this.selected.date).startOf('week').toDate(),\n                    end: moment(this.selected.date).endOf('week').toDate(),\n                });\n                break;\n            case OverviewType.day:\n                this.drawDayOverview();\n                this.onChange.emit({\n                    overview: this.overview,\n                    start: moment(this.selected.date).startOf('day').toDate(),\n                    end: moment(this.selected.date).endOf('day').toDate(),\n                });\n                break;\n        }\n    };\n    \n    /**\n     * Draw global overview (multiple years)\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.drawGlobalOverview = function () {\n        var _this = this;\n        // Add current overview to the history\n        if (this.history[this.history.length - 1] !== this.overview) {\n            this.history.push(this.overview);\n        }\n        // Define start and end of the dataset\n        var /** @type {?} */ start = moment(this.data[0].date).startOf('year');\n        var /** @type {?} */ end = moment(this.data[this.data.length - 1].date).endOf('year');\n        // Define array of years and total values\n        var /** @type {?} */ data = this.data;\n        var /** @type {?} */ year_data = d3.timeYears(start, end).map(function (d) {\n            var /** @type {?} */ date = moment(d);\n            return /** @type {?} */ ({\n                'date': d,\n                'total': data.reduce(function (prev, current) {\n                    if (moment(current.date).year() === date.year()) {\n                        prev += current.total;\n                    }\n                    return prev;\n                }, 0),\n                'summary': function () {\n                    var /** @type {?} */ summary = data.reduce(function (summary, d) {\n                        if (moment(d.date).year() === date.year()) {\n                            for (var /** @type {?} */ i = 0; i < d.summary.length; i++) {\n                                if (!summary[d.summary[i].name]) {\n                                    summary[d.summary[i].name] = {\n                                        'value': d.summary[i].value,\n                                    };\n                                }\n                                else {\n                                    summary[d.summary[i].name].value += d.summary[i].value;\n                                }\n                            }\n                        }\n                        return summary;\n                    }, {});\n                    var /** @type {?} */ unsorted_summary = Object.keys(summary).map(function (key) {\n                        return {\n                            'name': key,\n                            'value': summary[key].value\n                        };\n                    });\n                    return unsorted_summary.sort(function (a, b) {\n                        return b.value - a.value;\n                    });\n                }(),\n            });\n        });\n        // Calculate max value of all the years in the dataset\n        var /** @type {?} */ max_value = d3.max(year_data, function (d) {\n            return d.total;\n        });\n        // Define year labels and axis\n        var /** @type {?} */ year_labels = d3.timeYears(start, end).map(function (d) {\n            return moment(d);\n        });\n        var /** @type {?} */ yearScale = d3.scaleBand()\n            .rangeRound([0, this.width])\n            .padding(0.05)\n            .domain(year_labels.map(function (d) {\n            return d.year();\n        }));\n        // Add global data items to the overview\n        this.items.selectAll('.item-block-year').remove();\n        var /** @type {?} */ item_block = this.items.selectAll('.item-block-year')\n            .data(year_data)\n            .enter()\n            .append('rect')\n            .attr('class', 'item item-block-year')\n            .attr('width', function () {\n            return (_this.width - _this.label_padding) / year_labels.length - _this.gutter * 5;\n        })\n            .attr('height', function () {\n            return _this.height - _this.label_padding;\n        })\n            .attr('transform', function (d) {\n            return 'translate(' + yearScale(moment(d.date).year().toString()) + ',' + _this.tooltip_padding * 2 + ')';\n        })\n            .attr('fill', function (d) {\n            var /** @type {?} */ color = d3.scaleLinear()\n                .range(['#ffffff', _this.color || '#ff4500'])\n                .domain([-0.15 * max_value, max_value]);\n            return color(d.total) || '#ff4500';\n        })\n            .on('click', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Set in_transition flag\n            _this.in_transition = true;\n            // Set selected date to the one clicked on\n            _this.selected = d;\n            // Hide tooltip\n            _this.hideTooltip();\n            // Remove all global overview related items and labels\n            _this.removeGlobalOverview();\n            // Redraw the chart\n            _this.overview = OverviewType.year;\n            _this.drawChart();\n        })\n            .style('opacity', 0)\n            .on('mouseover', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Construct tooltip\n            var /** @type {?} */ tooltip_html = _this.buildGlobalTooltip(d);\n            // Calculate tooltip position\n            var /** @type {?} */ x = yearScale(moment(d.date).year().toString()) + _this.tooltip_padding * 2;\n            while (_this.width - x < (_this.tooltip_width + _this.tooltip_padding * 5)) {\n                x -= 10;\n            }\n            var /** @type {?} */ y = _this.tooltip_padding * 4;\n            // Show tooltip\n            _this.tooltip.html(tooltip_html)\n                .style('left', x + 'px')\n                .style('top', y + 'px')\n                .transition()\n                .duration(_this.transition_duration / 2)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.hideTooltip();\n        })\n            .transition()\n            .delay(function (d, i) {\n            return _this.transition_duration * (i + 1) / 10;\n        })\n            .duration(function () {\n            return _this.transition_duration;\n        })\n            .ease(d3.easeLinear)\n            .style('opacity', 1)\n            .call(function (transition, callback) {\n            if (transition.empty()) {\n                callback();\n            }\n            var /** @type {?} */ n = 0;\n            transition\n                .each(function () { ++n; })\n                .on('end', function () {\n                if (!--n) {\n                    callback.apply(this, arguments);\n                }\n            });\n        }, function () {\n            _this.in_transition = false;\n        });\n        // Add year labels\n        this.labels.selectAll('.label-year').remove();\n        this.labels.selectAll('.label-year')\n            .data(year_labels)\n            .enter()\n            .append('text')\n            .attr('class', 'label label-year')\n            .attr('font-size', function () {\n            return Math.floor(_this.label_padding / 3) + 'px';\n        })\n            .text(function (d) { return _this.yearLabel(d.toDate()); })\n            .attr('x', function (d) {\n            return yearScale(d.year());\n        })\n            .attr('y', this.label_padding / 2)\n            .on('mouseenter', function (year_label) {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-block-year')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', function (d) {\n                return (moment(d.date).year() === year_label.year()) ? 1 : 0.1;\n            });\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-block-year')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        })\n            .on('click', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Set in_transition flag\n            _this.in_transition = true;\n            // Set selected year to the one clicked on\n            _this.selected = { date: d };\n            // Hide tooltip\n            _this.hideTooltip();\n            // Remove all global overview related items and labels\n            _this.removeGlobalOverview();\n            // Redraw the chart\n            _this.overview = OverviewType.year;\n            _this.drawChart();\n        });\n    };\n    \n    /**\n     * Draw year overview\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.drawYearOverview = function () {\n        var _this = this;\n        // Add current overview to the history\n        if (this.history[this.history.length - 1] !== this.overview) {\n            this.history.push(this.overview);\n        }\n        // Define start and end date of the selected year\n        var /** @type {?} */ start_of_year = moment(this.selected.date).startOf('year');\n        var /** @type {?} */ end_of_year = moment(this.selected.date).endOf('year');\n        // Filter data down to the selected year\n        var /** @type {?} */ year_data = this.data.filter(function (d) {\n            return start_of_year <= moment(d.date) && moment(d.date) < end_of_year;\n        });\n        // Calculate max value of the year data\n        var /** @type {?} */ max_value = d3.max(year_data, function (d) {\n            return d.total;\n        });\n        var /** @type {?} */ color = d3.scaleLinear()\n            .range(['#ffffff', this.color])\n            .domain([-0.15 * max_value, max_value]);\n        this.items.selectAll('.item-circle').remove();\n        this.items.selectAll('.item-circle')\n            .data(year_data)\n            .enter()\n            .append('rect')\n            .attr('class', 'item item-circle')\n            .style('opacity', 0)\n            .attr('x', function (d) {\n            return _this.calcItemX(d, start_of_year) + (_this.item_size - _this.calcItemSize(d, max_value)) / 2;\n        })\n            .attr('y', function (d) {\n            return _this.calcItemY(d) + (_this.item_size - _this.calcItemSize(d, max_value)) / 2;\n        })\n            .attr('rx', function (d) {\n            return _this.calcItemSize(d, max_value);\n        })\n            .attr('ry', function (d) {\n            return _this.calcItemSize(d, max_value);\n        })\n            .attr('width', function (d) {\n            return _this.calcItemSize(d, max_value);\n        })\n            .attr('height', function (d) {\n            return _this.calcItemSize(d, max_value);\n        })\n            .attr('fill', function (d) {\n            return (d.total > 0) ? color(d.total) : 'transparent';\n        })\n            .on('click', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Don't transition if there is no data to show\n            if (d.total === 0) {\n                return;\n            }\n            _this.in_transition = true;\n            // Set selected date to the one clicked on\n            _this.selected = d;\n            // Hide tooltip\n            _this.hideTooltip();\n            // Remove all year overview related items and labels\n            _this.removeYearOverview();\n            // Redraw the chart\n            _this.overview = OverviewType.day;\n            _this.drawChart();\n        })\n            .on('mouseover', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Pulsating animation\n            var /** @type {?} */ circle = d3.select(d3.event.currentTarget);\n            var /** @type {?} */ repeat = function () {\n                circle.transition()\n                    .duration(_this.transition_duration)\n                    .ease(d3.easeLinear)\n                    .attr('x', function (d) {\n                    return _this.calcItemX(d, start_of_year) - (_this.item_size * 1.1 - _this.item_size) / 2;\n                })\n                    .attr('y', function (d) {\n                    return _this.calcItemY(d) - (_this.item_size * 1.1 - _this.item_size) / 2;\n                })\n                    .attr('width', _this.item_size * 1.1)\n                    .attr('height', _this.item_size * 1.1)\n                    .transition()\n                    .duration(_this.transition_duration)\n                    .ease(d3.easeLinear)\n                    .attr('x', function (d) {\n                    return _this.calcItemX(d, start_of_year) + (_this.item_size - _this.calcItemSize(d, max_value)) / 2;\n                })\n                    .attr('y', function (d) {\n                    return _this.calcItemY(d) + (_this.item_size - _this.calcItemSize(d, max_value)) / 2;\n                })\n                    .attr('width', function (d) {\n                    return _this.calcItemSize(d, max_value);\n                })\n                    .attr('height', function (d) {\n                    return _this.calcItemSize(d, max_value);\n                })\n                    .on('end', repeat);\n            };\n            repeat();\n            // Construct tooltip\n            var /** @type {?} */ tooltip_html = _this.buildYearTooltip(d);\n            // Calculate tooltip position\n            var /** @type {?} */ x = _this.calcItemX(d, start_of_year) + _this.item_size / 2;\n            if (_this.width - x < (_this.tooltip_width + _this.tooltip_padding * 3)) {\n                x -= _this.tooltip_width + _this.tooltip_padding * 2;\n            }\n            var /** @type {?} */ y = _this.calcItemY(d) + _this.item_size / 2;\n            // Show tooltip\n            _this.tooltip.html(tooltip_html)\n                .style('left', x + 'px')\n                .style('top', y + 'px')\n                .transition()\n                .duration(_this.transition_duration / 2)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            // Set circle radius back to what it's supposed to be\n            d3.select(d3.event.currentTarget).transition()\n                .duration(_this.transition_duration / 2)\n                .ease(d3.easeLinear)\n                .attr('x', function (d) {\n                return _this.calcItemX(d, start_of_year) + (_this.item_size - _this.calcItemSize(d, max_value)) / 2;\n            })\n                .attr('y', function (d) {\n                return _this.calcItemY(d) + (_this.item_size - _this.calcItemSize(d, max_value)) / 2;\n            })\n                .attr('width', function (d) {\n                return _this.calcItemSize(d, max_value);\n            })\n                .attr('height', function (d) {\n                return _this.calcItemSize(d, max_value);\n            });\n            // Hide tooltip\n            _this.hideTooltip();\n        })\n            .transition()\n            .delay(function () {\n            return (Math.cos(Math.PI * Math.random()) + 1) * _this.transition_duration;\n        })\n            .duration(function () {\n            return _this.transition_duration;\n        })\n            .ease(d3.easeLinear)\n            .style('opacity', 1)\n            .call(function (transition, callback) {\n            if (transition.empty()) {\n                callback();\n            }\n            var /** @type {?} */ n = 0;\n            transition\n                .each(function () { ++n; })\n                .on('end', function () {\n                if (!--n) {\n                    callback.apply(this, arguments);\n                }\n            });\n        }, function () {\n            _this.in_transition = false;\n        });\n        // Add month labels\n        var /** @type {?} */ month_labels = d3.timeMonths(start_of_year.toDate(), end_of_year.toDate());\n        var /** @type {?} */ monthScale = d3.scaleLinear()\n            .range([0, this.width])\n            .domain([0, month_labels.length]);\n        this.labels.selectAll('.label-month').remove();\n        this.labels.selectAll('.label-month')\n            .data(month_labels)\n            .enter()\n            .append('text')\n            .attr('class', 'label label-month')\n            .attr('font-size', function () {\n            return Math.floor(_this.label_padding / 3) + 'px';\n        })\n            .text(function (d) { return _this.monthLabel(d); })\n            .attr('x', function (d, i) {\n            return monthScale(i) + (monthScale(i) - monthScale(i - 1)) / 2;\n        })\n            .attr('y', this.label_padding / 2)\n            .on('mouseenter', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            var /** @type {?} */ selected_month = moment(d);\n            _this.items.selectAll('.item-circle')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', function (d) {\n                return moment(d.date).isSame(selected_month, 'month') ? 1 : 0.1;\n            });\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-circle')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        })\n            .on('click', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Check month data\n            var /** @type {?} */ month_data = _this.data.filter(function (e) {\n                return moment(d).startOf('month') <= moment(e.date) && moment(e.date) < moment(d).endOf('month');\n            });\n            // Don't transition if there is no data to show\n            if (!month_data.length) {\n                return;\n            }\n            // Set selected month to the one clicked on\n            _this.selected = { date: d };\n            _this.in_transition = true;\n            // Hide tooltip\n            _this.hideTooltip();\n            // Remove all year overview related items and labels\n            _this.removeYearOverview();\n            // Redraw the chart\n            _this.overview = OverviewType.month;\n            _this.drawChart();\n        });\n        // Add day labels\n        var /** @type {?} */ day_labels = d3.timeDays(moment().startOf('week').toDate(), moment().endOf('week').toDate());\n        var /** @type {?} */ dayScale = d3.scaleBand()\n            .rangeRound([this.label_padding, this.height])\n            .domain(day_labels.map(function (d) {\n            return moment(d).weekday().toString();\n        }));\n        this.labels.selectAll('.label-day').remove();\n        this.labels.selectAll('.label-day')\n            .data(day_labels)\n            .enter()\n            .append('text')\n            .attr('class', 'label label-day')\n            .attr('x', this.label_padding / 3)\n            .attr('y', function (d, i) {\n            return dayScale((i).toString()) + dayScale.bandwidth() / 1.75;\n        })\n            .style('text-anchor', 'left')\n            .attr('font-size', function () {\n            return Math.floor(_this.label_padding / 3) + 'px';\n        })\n            .text(function (d) { return _this.dayOfWeekLabel(d); })\n            .on('mouseenter', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            var /** @type {?} */ selected_day = moment(d);\n            _this.items.selectAll('.item-circle')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', function (d) {\n                return (moment(d.date).day() === selected_day.day()) ? 1 : 0.1;\n            });\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-circle')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        });\n        // Add button to switch back to previous overview\n        this.drawButton();\n    };\n    \n    /**\n     * Draw month overview\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.drawMonthOverview = function () {\n        var _this = this;\n        // Add current overview to the history\n        if (this.history[this.history.length - 1] !== this.overview) {\n            this.history.push(this.overview);\n        }\n        // Define beginning and end of the month\n        var /** @type {?} */ start_of_month = moment(this.selected.date).startOf('month');\n        var /** @type {?} */ end_of_month = moment(this.selected.date).endOf('month');\n        // Filter data down to the selected month\n        var /** @type {?} */ month_data = this.data.filter(function (d) {\n            return start_of_month <= moment(d.date) && moment(d.date) < end_of_month;\n        });\n        var /** @type {?} */ max_value = d3.max(month_data, function (d) {\n            return d3.max(d.summary, function (d) {\n                return +d.value;\n            });\n        });\n        // Define day labels and axis\n        var /** @type {?} */ day_labels = d3.timeDays(moment().startOf('week').toDate(), moment().endOf('week').toDate());\n        var /** @type {?} */ dayScale = d3.scaleBand()\n            .rangeRound([this.label_padding, this.height])\n            .domain(day_labels.map(function (d) {\n            return moment(d).weekday().toString();\n        }));\n        // Define week labels and axis\n        var /** @type {?} */ week_labels = [start_of_month.clone()];\n        while (start_of_month.week() !== end_of_month.week()) {\n            week_labels.push(start_of_month.add(1, 'week').clone());\n        }\n        var /** @type {?} */ weekScale = d3.scaleBand()\n            .rangeRound([this.label_padding, this.width])\n            .padding(0.05)\n            .domain(week_labels.map(function (weekday) {\n            return weekday.week().toString();\n        }));\n        // Add month data items to the overview\n        this.items.selectAll('.item-block-month').remove();\n        var /** @type {?} */ item_block = this.items.selectAll('.item-block-month')\n            .data(month_data)\n            .enter()\n            .append('g')\n            .attr('class', 'item item-block-month')\n            .attr('width', function () {\n            return (_this.width - _this.label_padding) / week_labels.length - _this.gutter * 5;\n        })\n            .attr('height', function () {\n            return Math.min(dayScale.bandwidth(), _this.max_block_height);\n        })\n            .attr('transform', function (d) {\n            return 'translate(' + weekScale(moment(d.date).week().toString()) + ',' + ((dayScale(moment(d.date).weekday().toString()) + dayScale.bandwidth() / 1.75) - 15) + ')';\n        })\n            .attr('total', function (d) {\n            return d.total;\n        })\n            .attr('date', function (d) {\n            return d.date;\n        })\n            .attr('offset', 0)\n            .on('click', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Don't transition if there is no data to show\n            if (d.total === 0) {\n                return;\n            }\n            _this.in_transition = true;\n            // Set selected date to the one clicked on\n            _this.selected = d;\n            // Hide tooltip\n            _this.hideTooltip();\n            // Remove all month overview related items and labels\n            _this.removeMonthOverview();\n            // Redraw the chart\n            _this.overview = OverviewType.day;\n            _this.drawChart();\n        });\n        var /** @type {?} */ item_width = (this.width - this.label_padding) / week_labels.length - this.gutter * 5;\n        var /** @type {?} */ itemScale = d3.scaleLinear()\n            .rangeRound([0, item_width]);\n        var /** @type {?} */ item_gutter = this.item_gutter;\n        item_block.selectAll('.item-block-rect')\n            .data(function (d) {\n            return d.summary;\n        })\n            .enter()\n            .append('rect')\n            .attr('class', 'item item-block-rect')\n            .attr('x', function (d) {\n            var /** @type {?} */ total = parseInt(d3.select(this.parentNode).attr('total'));\n            var /** @type {?} */ offset = parseInt(d3.select(this.parentNode).attr('offset'));\n            itemScale.domain([0, total]);\n            d3.select(this.parentNode).attr('offset', offset + itemScale(d.value));\n            return offset;\n        })\n            .attr('width', function (d) {\n            var /** @type {?} */ total = parseInt(d3.select(this.parentNode).attr('total'));\n            itemScale.domain([0, total]);\n            return Math.max((itemScale(d.value) - item_gutter), 1);\n        })\n            .attr('height', function () {\n            return Math.min(dayScale.bandwidth(), _this.max_block_height);\n        })\n            .attr('fill', function (d) {\n            var /** @type {?} */ color = d3.scaleLinear()\n                .range(['#ffffff', _this.color])\n                .domain([-0.15 * max_value, max_value]);\n            return color(d.value) || '#ff4500';\n        })\n            .style('opacity', 0)\n            .on('mouseover', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Get date from the parent node\n            var /** @type {?} */ date = new Date(d3.select(d3.event.currentTarget.parentNode).attr('date'));\n            // Construct tooltip\n            var /** @type {?} */ tooltip_html = _this.buildMonthTooltip([d, date]);\n            // Calculate tooltip position\n            var /** @type {?} */ x = weekScale(moment(date).week().toString()) + _this.tooltip_padding;\n            while (_this.width - x < (_this.tooltip_width + _this.tooltip_padding * 3)) {\n                x -= 10;\n            }\n            var /** @type {?} */ y = dayScale(moment(date).weekday().toString()) + _this.tooltip_padding;\n            // Show tooltip\n            _this.tooltip.html(tooltip_html)\n                .style('left', x + 'px')\n                .style('top', y + 'px')\n                .transition()\n                .duration(_this.transition_duration / 2)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.hideTooltip();\n        })\n            .transition()\n            .delay(function () {\n            return (Math.cos(Math.PI * Math.random()) + 1) * _this.transition_duration;\n        })\n            .duration(function () {\n            return _this.transition_duration;\n        })\n            .ease(d3.easeLinear)\n            .style('opacity', 1)\n            .call(function (transition, callback) {\n            if (transition.empty()) {\n                callback();\n            }\n            var /** @type {?} */ n = 0;\n            transition\n                .each(function () { ++n; })\n                .on('end', function () {\n                if (!--n) {\n                    callback.apply(this, arguments);\n                }\n            });\n        }, function () {\n            _this.in_transition = false;\n        });\n        // Add week labels\n        this.labels.selectAll('.label-week').remove();\n        this.labels.selectAll('.label-week')\n            .data(week_labels)\n            .enter()\n            .append('text')\n            .attr('class', 'label label-week')\n            .attr('font-size', function () {\n            return Math.floor(_this.label_padding / 3) + 'px';\n        })\n            .text(function (d) { return _this.weekLabel(d.week()); })\n            .attr('x', function (d) {\n            return weekScale(d.week());\n        })\n            .attr('y', this.label_padding / 2)\n            .on('mouseenter', function (weekday) {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-block-month')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', function (d) {\n                return (moment(d.date).week() === weekday.week()) ? 1 : 0.1;\n            });\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-block-month')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        })\n            .on('click', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Check week data\n            var /** @type {?} */ week_data = _this.data.filter(function (e) {\n                return d.startOf('week') <= moment(e.date) && moment(e.date) < d.endOf('week');\n            });\n            // Don't transition if there is no data to show\n            if (!week_data.length) {\n                return;\n            }\n            _this.in_transition = true;\n            // Set selected month to the one clicked on\n            _this.selected = { date: d };\n            // Hide tooltip\n            _this.hideTooltip();\n            // Remove all year overview related items and labels\n            _this.removeMonthOverview();\n            // Redraw the chart\n            _this.overview = OverviewType.week;\n            _this.drawChart();\n        });\n        // Add day labels\n        this.labels.selectAll('.label-day').remove();\n        this.labels.selectAll('.label-day')\n            .data(day_labels)\n            .enter()\n            .append('text')\n            .attr('class', 'label label-day')\n            .attr('x', this.label_padding / 3)\n            .attr('y', function (d, i) {\n            return dayScale(i) + dayScale.bandwidth() / 1.75;\n        })\n            .style('text-anchor', 'left')\n            .attr('font-size', function () {\n            return Math.floor(_this.label_padding / 3) + 'px';\n        })\n            .text(function (d) { return _this.dayOfWeekLabel(d); })\n            .on('mouseenter', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            var /** @type {?} */ selected_day = moment(d);\n            _this.items.selectAll('.item-block-month')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', function (d) {\n                return (moment(d.date).day() === selected_day.day()) ? 1 : 0.1;\n            });\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-block-month')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        });\n        // Add button to switch back to previous overview\n        this.drawButton();\n    };\n    \n    /**\n     * Draw week overview\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.drawWeekOverview = function () {\n        var _this = this;\n        // Add current overview to the history\n        if (this.history[this.history.length - 1] !== this.overview) {\n            this.history.push(this.overview);\n        }\n        // Define beginning and end of the week\n        var /** @type {?} */ start_of_week = moment(this.selected.date).startOf('week');\n        var /** @type {?} */ end_of_week = moment(this.selected.date).endOf('week');\n        // Filter data down to the selected week\n        var /** @type {?} */ week_data = this.data.filter(function (d) {\n            return start_of_week <= moment(d.date) && moment(d.date) < end_of_week;\n        });\n        var /** @type {?} */ max_value = d3.max(week_data, function (d) {\n            return d3.max(d.summary, function (d) {\n                return +d.value;\n            });\n        });\n        // Define day labels and axis\n        var /** @type {?} */ day_labels = d3.timeDays(moment().startOf('week').toDate(), moment().endOf('week').toDate());\n        var /** @type {?} */ dayScale = d3.scaleBand()\n            .rangeRound([this.label_padding, this.height])\n            .domain(day_labels.map(function (d) {\n            return moment(d).weekday().toString();\n        }));\n        // Define week labels and axis\n        var /** @type {?} */ week_labels = [start_of_week];\n        var /** @type {?} */ weekScale = d3.scaleBand()\n            .rangeRound([this.label_padding, this.width])\n            .padding(0.01)\n            .domain(week_labels.map(function (weekday) {\n            return weekday.week();\n        }));\n        // Add week data items to the overview\n        this.items.selectAll('.item-block-week').remove();\n        var /** @type {?} */ item_block = this.items.selectAll('.item-block-week')\n            .data(week_data)\n            .enter()\n            .append('g')\n            .attr('class', 'item item-block-week')\n            .attr('width', function () {\n            return (_this.width - _this.label_padding) / week_labels.length - _this.gutter * 5;\n        })\n            .attr('height', function () {\n            return Math.min(dayScale.bandwidth(), _this.max_block_height);\n        })\n            .attr('transform', function (d) {\n            return 'translate(' + weekScale(moment(d.date).week().toString()) + ',' + ((dayScale(moment(d.date).weekday().toString()) + dayScale.bandwidth() / 1.75) - 15) + ')';\n        })\n            .attr('total', function (d) {\n            return d.total;\n        })\n            .attr('date', function (d) {\n            return d.date;\n        })\n            .attr('offset', 0)\n            .on('click', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Don't transition if there is no data to show\n            if (d.total === 0) {\n                return;\n            }\n            _this.in_transition = true;\n            // Set selected date to the one clicked on\n            _this.selected = d;\n            // Hide tooltip\n            _this.hideTooltip();\n            // Remove all week overview related items and labels\n            _this.removeWeekOverview();\n            // Redraw the chart\n            _this.overview = OverviewType.day;\n            _this.drawChart();\n        });\n        var /** @type {?} */ item_width = (this.width - this.label_padding) / week_labels.length - this.gutter * 5;\n        var /** @type {?} */ itemScale = d3.scaleLinear()\n            .rangeRound([0, item_width]);\n        var /** @type {?} */ item_gutter = this.item_gutter;\n        item_block.selectAll('.item-block-rect')\n            .data(function (d) {\n            return d.summary;\n        })\n            .enter()\n            .append('rect')\n            .attr('class', 'item item-block-rect')\n            .attr('x', function (d) {\n            var /** @type {?} */ total = parseInt(d3.select(this.parentNode).attr('total'));\n            var /** @type {?} */ offset = parseInt(d3.select(this.parentNode).attr('offset'));\n            itemScale.domain([0, total]);\n            d3.select(this.parentNode).attr('offset', offset + itemScale(d.value));\n            return offset;\n        })\n            .attr('width', function (d) {\n            var /** @type {?} */ total = parseInt(d3.select(this.parentNode).attr('total'));\n            itemScale.domain([0, total]);\n            return Math.max((itemScale(d.value) - item_gutter), 1);\n        })\n            .attr('height', function () {\n            return Math.min(dayScale.bandwidth(), _this.max_block_height);\n        })\n            .attr('fill', function (d) {\n            var /** @type {?} */ color = d3.scaleLinear()\n                .range(['#ffffff', _this.color])\n                .domain([-0.15 * max_value, max_value]);\n            return color(d.value) || '#ff4500';\n        })\n            .style('opacity', 0)\n            .on('mouseover', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Get date from the parent node\n            var /** @type {?} */ date = new Date(d3.select(d3.event.currentTarget.parentNode).attr('date'));\n            // Construct tooltip\n            var /** @type {?} */ tooltip_html = _this.buildWeekTooltip([d, date]);\n            // Calculate tooltip position\n            var /** @type {?} */ total = parseInt(d3.select(d3.event.currentTarget.parentNode).attr('total'));\n            itemScale.domain([0, total]);\n            var /** @type {?} */ x = parseInt(d3.select(d3.event.currentTarget).attr('x')) + _this.tooltip_padding * 5;\n            while (_this.width - x < (_this.tooltip_width + _this.tooltip_padding * 3)) {\n                x -= 10;\n            }\n            var /** @type {?} */ y = dayScale(moment(date).weekday().toString()) + _this.tooltip_padding;\n            // Show tooltip\n            _this.tooltip.html(tooltip_html)\n                .style('left', x + 'px')\n                .style('top', y + 'px')\n                .transition()\n                .duration(_this.transition_duration / 2)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.hideTooltip();\n        })\n            .transition()\n            .delay(function () {\n            return (Math.cos(Math.PI * Math.random()) + 1) * _this.transition_duration;\n        })\n            .duration(function () {\n            return _this.transition_duration;\n        })\n            .ease(d3.easeLinear)\n            .style('opacity', 1)\n            .call(function (transition, callback) {\n            if (transition.empty()) {\n                callback();\n            }\n            var /** @type {?} */ n = 0;\n            transition\n                .each(function () { ++n; })\n                .on('end', function () {\n                if (!--n) {\n                    callback.apply(this, arguments);\n                }\n            });\n        }, function () {\n            _this.in_transition = false;\n        });\n        // Add week labels\n        this.labels.selectAll('.label-week').remove();\n        this.labels.selectAll('.label-week')\n            .data(week_labels)\n            .enter()\n            .append('text')\n            .attr('class', 'label label-week')\n            .attr('font-size', function () {\n            return Math.floor(_this.label_padding / 3) + 'px';\n        })\n            .text(function (d) { return _this.weekLabel(d.week()); })\n            .attr('x', function (d) {\n            return weekScale(d.week());\n        })\n            .attr('y', this.label_padding / 2)\n            .on('mouseenter', function (weekday) {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-block-week')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', function (d) {\n                return (moment(d.date).week() === weekday.week()) ? 1 : 0.1;\n            });\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-block-week')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        });\n        // Add day labels\n        this.labels.selectAll('.label-day').remove();\n        this.labels.selectAll('.label-day')\n            .data(day_labels)\n            .enter()\n            .append('text')\n            .attr('class', 'label label-day')\n            .attr('x', this.label_padding / 3)\n            .attr('y', function (d, i) {\n            return dayScale((i).toString()) + dayScale.bandwidth() / 1.75;\n        })\n            .style('text-anchor', 'left')\n            .attr('font-size', function () {\n            return Math.floor(_this.label_padding / 3) + 'px';\n        })\n            .text(function (d) { return _this.dayOfWeekLabel(d); })\n            .on('mouseenter', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            var /** @type {?} */ selected_day = moment(d);\n            _this.items.selectAll('.item-block-week')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', function (d) {\n                return (moment(d.date).day() === selected_day.day()) ? 1 : 0.1;\n            });\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-block-week')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        });\n        // Add button to switch back to previous overview\n        this.drawButton();\n    };\n    \n    /**\n     * Draw day overview\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.drawDayOverview = function () {\n        var _this = this;\n        // Add current overview to the history\n        if (this.history[this.history.length - 1] !== this.overview) {\n            this.history.push(this.overview);\n        }\n        // Initialize selected date to today if it was not set\n        if (!Object.keys(this.selected).length) {\n            this.selected = this.data[this.data.length - 1];\n        }\n        var /** @type {?} */ project_labels = this.selected.summary.map(function (project) { return project.name; });\n        var /** @type {?} */ projectScale = d3.scaleBand()\n            .rangeRound([this.label_padding, this.height])\n            .domain(project_labels);\n        var /** @type {?} */ itemScale = d3.scaleTime()\n            .range([this.label_padding * 2, this.width])\n            .domain([moment(this.selected.date).startOf('day'), moment(this.selected.date).endOf('day')]);\n        this.items.selectAll('.item-block').remove();\n        this.items.selectAll('.item-block')\n            .data(this.selected.details)\n            .enter()\n            .append('rect')\n            .attr('class', 'item item-block')\n            .attr('x', function (d) {\n            return itemScale(moment(d.date));\n        })\n            .attr('y', function (d) {\n            return (projectScale(d.name) + projectScale.bandwidth() / 2) - 15;\n        })\n            .attr('width', function (d) {\n            var /** @type {?} */ end = itemScale(d3.timeSecond.offset(moment(d.date).toDate(), d.value));\n            return Math.max((end - itemScale(moment(d.date))), 1);\n        })\n            .attr('height', function () {\n            return Math.min(projectScale.bandwidth(), _this.max_block_height);\n        })\n            .attr('fill', function () {\n            return _this.color;\n        })\n            .style('opacity', 0)\n            .on('mouseover', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            // Construct tooltip\n            var /** @type {?} */ tooltip_html = _this.buildDayTooltip(d);\n            // Calculate tooltip position\n            var /** @type {?} */ x = d.value * 100 / (60 * 60 * 24) + itemScale(moment(d.date));\n            while (_this.width - x < (_this.tooltip_width + _this.tooltip_padding * 3)) {\n                x -= 10;\n            }\n            var /** @type {?} */ y = projectScale(d.name) + _this.tooltip_padding;\n            // Show tooltip\n            _this.tooltip.html(tooltip_html)\n                .style('left', x + 'px')\n                .style('top', y + 'px')\n                .transition()\n                .duration(_this.transition_duration / 2)\n                .ease(d3.easeLinear)\n                .style('opacity', 1);\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.hideTooltip();\n        })\n            .on('click', function (d) {\n            if (_this.handler) {\n                _this.handler.emit(d);\n            }\n        })\n            .transition()\n            .delay(function () {\n            return (Math.cos(Math.PI * Math.random()) + 1) * _this.transition_duration;\n        })\n            .duration(function () {\n            return _this.transition_duration;\n        })\n            .ease(d3.easeLinear)\n            .style('opacity', 0.5)\n            .call(function (transition, callback) {\n            if (transition.empty()) {\n                callback();\n            }\n            var /** @type {?} */ n = 0;\n            transition\n                .each(function () { ++n; })\n                .on('end', function () {\n                if (!--n) {\n                    callback.apply(this, arguments);\n                }\n            });\n        }, function () {\n            _this.in_transition = false;\n        });\n        // Add time labels\n        var /** @type {?} */ timeLabels = d3.timeHours(moment(this.selected.date).startOf('day').toDate(), moment(this.selected.date).endOf('day').toDate());\n        var /** @type {?} */ timeScale = d3.scaleTime()\n            .range([this.label_padding * 2, this.width])\n            .domain([0, timeLabels.length]);\n        this.labels.selectAll('.label-time').remove();\n        this.labels.selectAll('.label-time')\n            .data(timeLabels)\n            .enter()\n            .append('text')\n            .attr('class', 'label label-time')\n            .attr('font-size', function () {\n            return Math.floor(_this.label_padding / 3) + 'px';\n        })\n            .text(function (d) { return _this.timeLabel(d); })\n            .attr('x', function (d, i) {\n            return timeScale(i);\n        })\n            .attr('y', this.label_padding / 2)\n            .on('mouseenter', function (d) {\n            if (_this.in_transition) {\n                return;\n            }\n            var /** @type {?} */ selected = itemScale(moment(d));\n            _this.items.selectAll('.item-block')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', function (d) {\n                var /** @type {?} */ start = itemScale(moment(d.date));\n                var /** @type {?} */ end = itemScale(moment(d.date).add(d.value, 'seconds'));\n                return (selected >= start && selected <= end) ? 1 : 0.1;\n            });\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-block')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', 0.5);\n        });\n        // Add project labels\n        var /** @type {?} */ label_padding = this.label_padding;\n        this.labels.selectAll('.label-project').remove();\n        this.labels.selectAll('.label-project')\n            .data(project_labels)\n            .enter()\n            .append('text')\n            .attr('class', 'label label-project')\n            .attr('x', this.gutter)\n            .attr('y', function (d) {\n            return projectScale(d) + projectScale.bandwidth() / 2;\n        })\n            .attr('min-height', function () {\n            return projectScale.bandwidth();\n        })\n            .style('text-anchor', 'left')\n            .attr('font-size', function () {\n            return Math.floor(_this.label_padding / 3) + 'px';\n        })\n            .text(function (d) { return _this.projectLabel(d); })\n            .each(function (d, i) {\n            var /** @type {?} */ obj = d3.select(this), /** @type {?} */ text_length = obj.node().getComputedTextLength(), /** @type {?} */ text = obj.text();\n            while (text_length > (label_padding * 1.5) && text.length > 0) {\n                text = text.slice(0, -1);\n                obj.text(text + '...');\n                text_length = obj.node().getComputedTextLength();\n            }\n        })\n            .on('mouseenter', function (project) {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-block')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', function (d) {\n                return (d.name === project) ? 1 : 0.1;\n            });\n        })\n            .on('mouseout', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            _this.items.selectAll('.item-block')\n                .transition()\n                .duration(_this.transition_duration)\n                .ease(d3.easeLinear)\n                .style('opacity', 0.5);\n        });\n        // Add button to switch back to previous overview\n        this.drawButton();\n    };\n    \n    /**\n     * Helper function to calculate item position on the x-axis\n     * @param {?} d object\n     * @param {?} start_of_year\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.calcItemX = function (d, start_of_year) {\n        var /** @type {?} */ date = moment(d.date);\n        var /** @type {?} */ dayIndex = Math.round((+date - +moment(start_of_year).startOf('week')) / 86400000);\n        var /** @type {?} */ colIndex = Math.trunc(dayIndex / 7);\n        return colIndex * (this.item_size + this.gutter) + this.label_padding;\n    };\n    \n    /**\n     * Helper function to calculate item position on the y-axis\n     * @param {?} d object\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.calcItemY = function (d) {\n        return this.label_padding + moment(d.date).weekday() * (this.item_size + this.gutter);\n    };\n    \n    /**\n     * Helper function to calculate item size\n     * @param {?} d object\n     * @param {?} max number\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.calcItemSize = function (d, max$$1) {\n        if (max$$1 <= 0) {\n            return this.item_size;\n        }\n        return this.item_size * 0.75 + (this.item_size * d.total / max$$1) * 0.25;\n    };\n    \n    /**\n     * Draw the button for navigation purposes\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.drawButton = function () {\n        var _this = this;\n        this.buttons.selectAll('.button').remove();\n        var /** @type {?} */ button = this.buttons.append('g')\n            .attr('class', 'button button-back')\n            .style('opacity', 0)\n            .on('click', function () {\n            if (_this.in_transition) {\n                return;\n            }\n            // Set transition boolean\n            _this.in_transition = true;\n            // Clean the canvas from whichever overview type was on\n            switch (_this.overview) {\n                case OverviewType.year:\n                    _this.removeYearOverview();\n                    break;\n                case OverviewType.month:\n                    _this.removeMonthOverview();\n                    break;\n                case OverviewType.week:\n                    _this.removeWeekOverview();\n                    break;\n                case OverviewType.day:\n                    _this.removeDayOverview();\n                    break;\n            }\n            // Redraw the chart\n            _this.history.pop();\n            _this.overview = _this.history.pop();\n            _this.drawChart();\n        });\n        button.append('circle')\n            .attr('cx', this.label_padding / 2.25)\n            .attr('cy', this.label_padding / 2.5)\n            .attr('r', this.item_size / 2);\n        button.append('text')\n            .attr('x', this.label_padding / 2.25)\n            .attr('y', this.label_padding / 2.5)\n            .attr('dy', function () {\n            return Math.floor(_this.width / 100) / 3;\n        })\n            .attr('font-size', function () {\n            return Math.floor(_this.label_padding / 3) + 'px';\n        })\n            .html('&#x2190;');\n        button.transition()\n            .duration(this.transition_duration)\n            .ease(d3.easeLinear)\n            .style('opacity', 1);\n    };\n    \n    /**\n     * Transition and remove items and labels related to global overview\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.removeGlobalOverview = function () {\n        this.items.selectAll('.item-block-year')\n            .transition()\n            .duration(this.transition_duration)\n            .ease(d3.easeLinear)\n            .style('opacity', 0)\n            .remove();\n        this.labels.selectAll('.label-year').remove();\n    };\n    \n    /**\n     * Transition and remove items and labels related to year overview\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.removeYearOverview = function () {\n        this.items.selectAll('.item-circle')\n            .transition()\n            .duration(this.transition_duration)\n            .ease(d3.easeLinear)\n            .style('opacity', 0)\n            .remove();\n        this.labels.selectAll('.label-day').remove();\n        this.labels.selectAll('.label-month').remove();\n        this.hideBackButton();\n    };\n    \n    /**\n     * Transition and remove items and labels related to month overview\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.removeMonthOverview = function () {\n        var _this = this;\n        this.items.selectAll('.item-block-month').selectAll('.item-block-rect')\n            .transition()\n            .duration(this.transition_duration)\n            .ease(d3.easeLinear)\n            .style('opacity', 0)\n            .attr('x', function (d, i) {\n            return (i % 2 === 0) ? -_this.width / 3 : _this.width / 3;\n        })\n            .remove();\n        this.labels.selectAll('.label-day').remove();\n        this.labels.selectAll('.label-week').remove();\n        this.hideBackButton();\n    };\n    \n    /**\n     * Transition and remove items and labels related to week overview\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.removeWeekOverview = function () {\n        var _this = this;\n        this.items.selectAll('.item-block-week').selectAll('.item-block-rect')\n            .transition()\n            .duration(this.transition_duration)\n            .ease(d3.easeLinear)\n            .style('opacity', 0)\n            .attr('x', function (d, i) {\n            return (i % 2 === 0) ? -_this.width / 3 : _this.width / 3;\n        })\n            .remove();\n        this.labels.selectAll('.label-day').remove();\n        this.labels.selectAll('.label-week').remove();\n        this.hideBackButton();\n    };\n    \n    /**\n     * Transition and remove items and labels related to daily overview\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.removeDayOverview = function () {\n        var _this = this;\n        this.items.selectAll('.item-block')\n            .transition()\n            .duration(this.transition_duration)\n            .ease(d3.easeLinear)\n            .style('opacity', 0)\n            .attr('x', function (d, i) {\n            return (i % 2 === 0) ? -_this.width / 3 : _this.width / 3;\n        })\n            .remove();\n        this.labels.selectAll('.label-time').remove();\n        this.labels.selectAll('.label-project').remove();\n        this.hideBackButton();\n    };\n    \n    /**\n     * Helper function to hide the tooltip\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.hideTooltip = function () {\n        this.tooltip.transition()\n            .duration(this.transition_duration / 2)\n            .ease(d3.easeLinear)\n            .style('opacity', 0);\n    };\n    \n    /**\n     * Helper function to hide the back button\n     * @return {?}\n     */\n    CalendarHeatmap.prototype.hideBackButton = function () {\n        this.buttons.selectAll('.button')\n            .transition()\n            .duration(this.transition_duration)\n            .ease(d3.easeLinear)\n            .style('opacity', 0)\n            .remove();\n    };\n    \n    CalendarHeatmap.decorators = [\n        { type: _angular_core.Component, args: [{\n                    selector: 'calendar-heatmap',\n                    template: \"<div #root></div>\",\n                    styles: [\"\\n    :host {\\n      position: relative;\\n      user-select: none;\\n      -ms-user-select: none;\\n      -moz-user-select: none;\\n      -webkit-user-select: none;\\n    }\\n    :host >>> .item {\\n      cursor: pointer;\\n    }\\n    :host >>> .label {\\n      cursor: pointer;\\n      fill: rgb(170, 170, 170);\\n      font-family: Helvetica, arial, 'Open Sans', sans-serif;\\n    }\\n    :host >>> .button {\\n      cursor: pointer;\\n      fill: transparent;\\n      stroke-width: 2;\\n      stroke: rgb(170, 170, 170);\\n    }\\n    :host >>> .button text {\\n      stroke-width: 1;\\n      text-anchor: middle;\\n      fill: rgb(170, 170, 170);\\n    }\\n    :host >>> .heatmap-tooltip {\\n      pointer-events: none;\\n      position: absolute;\\n      z-index: 9999;\\n      width: 250px;\\n      max-width: 250px;\\n      overflow: hidden;\\n      padding: 15px;\\n      font-size: 12px;\\n      line-height: 14px;\\n      color: rgb(51, 51, 51);\\n      font-family: Helvetica, arial, 'Open Sans', sans-serif;\\n      background: rgba(255, 255, 255, 0.75);\\n    }\\n    :host >>> .heatmap-tooltip .header strong {\\n      display: inline-block;\\n      width: 250px;\\n    }\\n    :host >>> .heatmap-tooltip span {\\n      display: inline-block;\\n      width: 50%;\\n      padding-right: 10px;\\n      box-sizing: border-box;\\n    }\\n    :host >>> .heatmap-tooltip span,\\n    :host >>> .heatmap-tooltip .header strong {\\n      white-space: nowrap;\\n      overflow: hidden;\\n      text-overflow: ellipsis;\\n    }\\n  \"],\n                },] },\n    ];\n    /**\n     * @nocollapse\n     */\n    CalendarHeatmap.ctorParameters = function () { return []; };\n    CalendarHeatmap.propDecorators = {\n        'element': [{ type: _angular_core.ViewChild, args: ['root',] },],\n        'data': [{ type: _angular_core.Input },],\n        'color': [{ type: _angular_core.Input },],\n        'overview': [{ type: _angular_core.Input },],\n        'formatTime': [{ type: _angular_core.Input },],\n        'projectLabel': [{ type: _angular_core.Input },],\n        'yearLabel': [{ type: _angular_core.Input },],\n        'monthLabel': [{ type: _angular_core.Input },],\n        'weekLabel': [{ type: _angular_core.Input },],\n        'dayOfWeekLabel': [{ type: _angular_core.Input },],\n        'timeLabel': [{ type: _angular_core.Input },],\n        'buildGlobalTooltip': [{ type: _angular_core.Input },],\n        'buildYearTooltip': [{ type: _angular_core.Input },],\n        'buildMonthTooltip': [{ type: _angular_core.Input },],\n        'buildWeekTooltip': [{ type: _angular_core.Input },],\n        'buildDayTooltip': [{ type: _angular_core.Input },],\n        'handler': [{ type: _angular_core.Output },],\n        'onChange': [{ type: _angular_core.Output },],\n        'onResize': [{ type: _angular_core.HostListener, args: ['window:resize', ['$event'],] },],\n    };\n    return CalendarHeatmap;\n}());\n\nexports.OverviewType = OverviewType;\nexports.CalendarHeatmap = CalendarHeatmap;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n"]}