{"version":3,"sources":["jsdelivr-header.js","/npm/objectivity-gantt-task-react@0.6.1/src/types/public-types.ts","/npm/objectivity-gantt-task-react@0.6.1/src/helpers/date-helper.ts","/npm/objectivity-gantt-task-react@0.6.1/src/components/task-list/task-list-header.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/task-list/task-list-table.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/other/tooltip.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/task-list/task-list.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/grid/grid-body.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/grid/grid.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/calendar/top-part-of-calendar.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/calendar/calendar.tsx","/npm/objectivity-gantt-task-react@0.6.1/node_modules/babel-plugin-transform-async-to-promises/helpers.mjs","/npm/objectivity-gantt-task-react@0.6.1/src/components/other/arrow.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/helpers/bar-helper.ts","/npm/objectivity-gantt-task-react@0.6.1/src/helpers/other-helper.ts","/npm/objectivity-gantt-task-react@0.6.1/src/components/task-item/bar/bar-display.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/task-item/bar/bar-date-handle.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/task-item/bar/bar-progress-handle.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/task-item/bar/bar.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/task-item/bar/bar-small.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/task-item/milestone/milestone.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/task-item/project/project.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/task-item/task-item.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/gantt/task-gantt-content.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/gantt/task-gantt.tsx","/npm/objectivity-gantt-task-react@0.6.1/src/components/gantt/gantt.tsx"],"names":[],"mappings":"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hB,GAAmB,EAAS,GAAY,YAAY,KAAK,E,EAJtD,EAAI,EAAG,EAAI,EAAa,OAAQ,IAAK,EAArC,GAMT,OAAO,C,GAIV,EAEK,iBAAmB,SACvB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEA,IAAI,EACJ,OAAQ,EAAK,MACX,IAAK,YACH,EAAU,mBACR,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEF,MACF,IAAK,UACH,EAAU,aACR,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEF,MACF,QACE,EAAU,aACR,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAIN,OAAO,CACR,EAEK,aAAe,SACnB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEA,IAAI,EACA,EACA,GACF,EAAK,mBAAmB,EAAK,MAAO,EAAO,GAC3C,EAAK,mBAAmB,EAAK,IAAK,EAAO,KAEzC,EAAK,gBAAgB,EAAK,MAAO,EAAO,GACxC,EAAK,gBAAgB,EAAK,IAAK,EAAO,IAExC,IAAI,EAAiC,EAAK,MAGpB,SAAjB,GAA4C,YAAjB,IAA+B,EAAK,EADnD,IAEf,EAAe,YACf,EAAK,EAHU,GAMjB,IAAA,EAAmC,qBACjC,EACA,EACA,EAAK,SACL,GAJK,EAAP,EAAA,GAAsB,EAAtB,EAAA,GAMM,EAAI,gBAAgB,EAAO,EAAW,GACtC,EAA6B,YAAd,EAAK,KAAqB,EAAK,kBAAe,EAE7D,EAAM,SAAA,CACV,gBAAiB,EACjB,wBAAyB,EACzB,cAAe,EACf,sBAAuB,GACpB,EAAK,QAEV,OAAA,SAAA,GACK,EADL,CAEE,eACA,KACA,KACA,IACA,QACA,YACA,gBACA,kBACA,cACA,eACA,OAAQ,EACR,YAAa,GACb,UAEH,EAEK,mBAAqB,SACzB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEA,IAAM,EAAI,gBAAgB,EAAK,MAAO,EAAO,GACvC,EAAI,gBAAgB,EAAO,EAAW,GAEtC,EAAK,EAAiB,GAAb,EACT,EAAK,EAAiB,GAAb,EAET,EAAgB,EAAa,MAC7B,EAAM,SAAA,CACV,gBAAiB,EACjB,wBAAyB,EACzB,cAAe,GACf,sBAAuB,IACpB,EAAK,QAEV,OAAA,SAAA,GACK,EADL,CAEE,IAAK,EAAK,MACV,KACA,KACA,IACA,QACA,UAAW,EACX,cAAe,EACf,kBACA,cACA,aAAc,EAAK,KACnB,SAAU,EACV,OAAQ,EACR,kBAAc,EACd,YAAa,GACb,UAEH,EAEK,gBAAkB,SAAC,EAAa,EAAe,GACnD,IAAI,EAAQ,EAAM,WAAU,SAAA,GAAC,OAAI,EAAE,WAAa,EAAM,S,IAAa,EASnE,OARI,EAAQ,IACV,EAAQ,GAMA,EAAQ,GAHM,EAAM,UAAY,EAAM,GAAO,YAElC,EAAM,EAAQ,GAAG,UAAY,EAAM,GAAO,WACX,CAErD,EACK,mBAAqB,SACzB,EACA,EACA,GAEA,IAAI,EAAI,gBAAgB,EAAO,EAAO,GAEtC,OADA,GAAK,CAEN,EACK,gBAAkB,SACtB,EACA,EACA,GAGA,OADU,EAAQ,GAAa,EAAY,GAAc,CAE1D,EAEY,qBAAuB,SAClC,EACA,EACA,EACA,GAEA,IAAM,GAAiB,EAAS,GAAU,EAAW,IAOrD,MAAO,CAAC,EALJ,EACU,EAAS,EAET,EAGf,EAaK,YAAc,SAAC,EAAW,GAC9B,GAAI,GAAK,EAAK,GAAI,OAAO,IACpB,GAAI,GAAK,EAAK,GAAI,OAAO,EAE5B,IAAM,EAAW,EAAK,GAAK,EAAK,GAEhC,OADwB,KAAK,MAAuB,KAAf,EAAI,EAAK,IAAa,EAG9D,EACK,eAAiB,SAAC,EAAW,GACjC,GAAI,GAAK,EAAK,GAAI,OAAO,EACpB,GAAI,GAAK,EAAK,GAAI,OAAO,IAE5B,IAAM,EAAW,EAAK,GAAK,EAAK,GAEhC,OADwB,KAAK,MAAuB,KAAf,EAAK,GAAK,GAAY,EAG9D,EAEY,iBAAmB,SAC9B,EACA,EACA,GAUA,MARc,CACZ,EAAY,EACZ,EAAQ,EACR,EAAY,EACZ,EAAQ,EACR,EACA,EAAQ,EAAa,MAEV,KAAK,IACnB,EAEK,SAAW,SAAC,EAAW,EAAe,GACtC,GAAK,EAAK,GAAwB,EAAnB,EAAK,cACtB,EAAI,EAAK,GAAwB,EAAnB,EAAK,aAErB,IACM,EADQ,KAAK,OAAO,EAAI,EAAK,IAAM,GACR,EAEjC,OADa,EAAK,GAAK,CAExB,EAEK,OAAS,SAAC,EAAW,EAAe,GACpC,GAAK,EAAK,GAAwB,EAAnB,EAAK,cACtB,EAAI,EAAK,GAAwB,EAAnB,EAAK,aAErB,IACM,EADQ,KAAK,OAAO,EAAI,EAAK,IAAM,GACR,EAEjC,OADa,EAAK,GAAK,CAExB,EAEK,QAAU,SAAC,EAAW,EAAe,GACzC,IACM,EADQ,KAAK,OAAO,EAAI,EAAK,IAAM,GACR,EAC3B,EAAQ,EAAK,GAAK,EAExB,MAAO,CAAC,EADM,EAAQ,EAAK,GAAK,EAAK,GAEtC,EAEK,QAAU,SACd,EACA,EACA,EACA,EACA,GAEA,IAAI,EAAU,IAAI,MAAO,EAAI,GAAS,EAAS,EAAW,EAAS,WAKnE,OAJA,EAAU,IAAI,KACZ,EAAQ,UACuD,KAA9D,EAAQ,oBAAsB,EAAS,qBAG3C,EAKY,0BAA4B,SACvC,EACA,EACA,EACA,EACA,EACA,EACA,GAEA,IAAI,EACJ,GACO,cADC,EAAa,KAEjB,EAAS,sCACP,EACA,EACA,EACA,EACA,EACA,QAIF,EAAS,gCACP,EACA,EACA,EACA,EACA,EACA,EACA,GAIN,OAAO,CACR,EAEK,gCAAkC,SACtC,EACA,EACA,EACA,EACA,EACA,EACA,GAEA,IAAM,EAAW,SAAA,GAAiB,GAC9B,GAAY,EAChB,OAAQ,GACN,IAAK,WAOH,GALE,EAAY,SADV,EACqB,eAAe,EAAM,GAErB,YAAY,EAAM,GAE3C,EAAY,EAAY,WAAa,EAAa,SACnC,CACb,IAAA,EAAmC,qBACjC,EAAY,GACZ,EAAY,GACZ,EAAY,SACZ,GAJK,EAAP,EAAA,GAAsB,EAAtB,EAAA,GAMA,EAAY,cAAgB,EAC5B,EAAY,UAAY,C,CAE1B,MACF,IAAK,QACH,IAAM,EAAQ,SAAS,EAAM,EAAO,GAGpC,GAFA,EAAY,GAAK,EACjB,EAAY,EAAY,KAAO,EAAa,GAC7B,CACT,EACF,EAAY,IAAM,QAChB,EACA,EAAa,GACb,EAAa,IACb,EACA,GAGF,EAAY,MAAQ,QAClB,EACA,EAAa,GACb,EAAa,MACb,EACA,GAGJ,IAAA,EAAmC,qBACjC,EAAY,GACZ,EAAY,GACZ,EAAY,SACZ,GAJK,EAAP,EAAA,GAAsB,EAAtB,EAAA,GAMA,EAAY,cAAgB,EAC5B,EAAY,UAAY,C,CAE1B,MAEF,IAAK,MACH,IAAM,EAAQ,OAAO,EAAM,EAAO,GAGlC,GAFA,EAAY,GAAK,EACjB,EAAY,EAAY,KAAO,EAAa,GAC7B,CACT,EACF,EAAY,MAAQ,QAClB,EACA,EAAa,GACb,EAAa,MACb,EACA,GAGF,EAAY,IAAM,QAChB,EACA,EAAa,GACb,EAAa,IACb,EACA,GAGJ,IAAA,EAAmC,qBACjC,EAAY,GACZ,EAAY,GACZ,EAAY,SACZ,GAJK,EAAP,EAAA,GAAsB,EAAtB,EAAA,GAMA,EAAY,cAAgB,EAC5B,EAAY,UAAY,C,CAE1B,MAEF,IAAK,OACH,IAAA,EAA+B,QAC7B,EAAO,EACP,EACA,GAHK,EAAP,EAAA,GAAkB,EAAlB,EAAA,GAMA,GADA,EAAY,IAAc,EAAa,GACxB,CACb,EAAY,MAAQ,QAClB,EACA,EAAa,GACb,EAAa,MACb,EACA,GAEF,EAAY,IAAM,QAChB,EACA,EAAa,GACb,EAAa,IACb,EACA,GAEF,EAAY,GAAK,EACjB,EAAY,GAAK,EACjB,IAAA,EAAmC,qBACjC,EAAY,GACZ,EAAY,GACZ,EAAY,SACZ,GAJK,EAAP,EAAA,GAAsB,EAAtB,EAAA,GAMA,EAAY,cAAgB,EAC5B,EAAY,UAAY,C,EAK9B,MAAO,CAAE,YAAW,cACrB,EAEK,sCAAwC,SAC5C,EACA,EACA,EACA,EACA,EACA,GAEA,IAAM,EAAW,SAAA,GAAiB,GAC9B,GAAY,EAChB,GACO,SADC,EACN,CACE,IAAA,EAA+B,QAC7B,EAAO,EACP,EACA,GAHK,EAAP,EAAA,GAAkB,EAAlB,EAAA,IAKA,EAAY,IAAc,EAAa,MAErC,EAAY,MAAQ,QAClB,EACA,EAAa,GACb,EAAa,MACb,EACA,GAEF,EAAY,IAAM,EAAY,MAC9B,EAAY,GAAK,EACjB,EAAY,GAAK,E,CAKvB,MAAO,CAAE,YAAW,cACrB,E,SC9kBe,gBACd,GAEA,YAA8C,IAAtC,EAA8B,GACvC,CAED,SAUgB,kBAAkB,GAChC,IAAM,EAAe,EAAM,QACzB,SAAA,GAAC,OAAI,EAAE,cAA2B,YAAX,EAAE,I,IAE3B,GAAI,EAAa,OAAS,EACxB,IAD2B,IAAA,EAAA,SAClB,GACP,IAAM,EAAc,EAAa,GAC3B,EAAW,YAAY,EAAO,GACpC,EAAQ,EAAM,QAAO,SAAA,GAAC,OAA6B,IAAzB,EAAS,QAAQ,E,KAHpC,EAAI,EAAG,EAAa,OAAS,EAAG,IAAK,EAArC,GAMX,OAAO,CACR,CAED,SAAS,YAAY,EAAkB,GACrC,IAAI,EAAgB,GAElB,EADgB,YAAd,EAAK,KACC,EAAS,QACf,SAAA,GAAC,OAAI,EAAE,eAAqD,IAArC,EAAE,aAAa,QAAQ,EAAK,G,IAG7C,EAAS,QAAO,SAAA,GAAC,OAAI,EAAE,SAAW,EAAE,UAAY,EAAK,E,IAE/D,IAAI,EAAuB,GAK3B,OAJA,EAAM,SAAQ,SAAA,GACZ,EAAa,KAAb,MAAA,EAAqB,YAAY,EAAU,G,IAE7C,EAAQ,EAAM,OAAO,EAAO,EAE7B,CAED,IAAa,UAAY,SAAC,EAAa,GACrC,IAAM,EAAS,EAAM,cAAgB,OAAO,UACtC,EAAS,EAAM,cAAgB,OAAO,UAC5C,OAAI,EAAS,EACJ,EACE,EAAS,GACV,EAED,CAEV,ECzCY,WAAwC,SAAA,G,IACnD,MACA,MACA,UACA,oBACA,WACA,eACA,WACA,gBAEM,EAAc,WAClB,OAAO,EAAa,EAAO,wBAA0B,EAAO,e,EAG9D,OACE,6BAAA,KAAG,YAAa,GACb,EAAO,KACN,6BAAA,QACE,EAAG,EAAK,EAAQ,EAChB,EAAG,EAAK,EAAS,EACjB,WAAW,OACX,SAAS,QACT,iBAAiB,S,cACL,SACZ,KAAM,KACL,EAAO,MAEV,6BAAA,QACE,EAAG,EACH,MAAO,EACP,EAAG,EACH,OAAQ,EACR,GAAI,EACJ,GAAI,EACJ,KAAM,MAKf,E,yEC/CY,cAA8C,SAAA,G,IACzD,MACA,MACA,UACA,WACA,oBACA,gBAEA,OACE,6BAAA,QACE,EAAG,EACH,EAAG,EACH,MAAO,EACP,OAAQ,EACR,UAAW,SAAO,UAClB,GAAI,EACJ,GAAI,EACJ,YAAa,GAGlB,ECxBY,kBAAsD,SAAA,G,IACjE,kBACA,gBAEA,OACE,6BAAA,WACE,UAAW,SAAO,UAClB,OAAQ,EACR,YAAa,GAGlB,ECVY,IAA+B,SAAA,G,IAC1C,SACA,yBACA,qBACA,QACA,iBACA,eAEM,EAAgB,mBAClB,EAAM,EAAK,cAAgB,EAAK,UAClC,EAAK,EACL,EAAK,QAED,EAAe,EAAK,OAAS,EACnC,OACE,6BAAA,KAAG,UAAW,SAAO,WAAY,SAAU,GACzC,6BAAC,WAAD,CACE,EAAG,EAAK,GACR,EAAG,EAAK,EACR,MAAO,EAAK,GAAK,EAAK,GACtB,OAAQ,EAAK,OACb,UAAW,EAAK,UAChB,cAAe,EAAK,cACpB,gBAAiB,EAAK,gBACtB,OAAQ,EAAK,OACb,WAAY,EACZ,YAAa,SAAA,GACX,GAAoB,EAAa,OAAQ,EAAM,E,IAGnD,6BAAA,KAAG,UAAU,eACV,GACC,6BAAA,SAEE,6BAAC,cAAD,CACE,EAAG,EAAK,GAAK,EACb,EAAG,EAAK,EAAI,EACZ,MAAO,EAAK,YACZ,OAAQ,EACR,gBAAiB,EAAK,gBACtB,YAAa,SAAA,GACX,EAAa,QAAS,EAAM,E,IAIhC,6BAAC,cAAD,CACE,EAAG,EAAK,GAAK,EAAK,YAAc,EAChC,EAAG,EAAK,EAAI,EACZ,MAAO,EAAK,YACZ,OAAQ,EACR,gBAAiB,EAAK,gBACtB,YAAa,SAAA,GACX,EAAa,MAAO,EAAM,E,KAKjC,GACC,6BAAC,kBAAD,CACE,cAAe,EACf,YAAa,SAAA,GACX,EAAa,WAAY,EAAM,E,KAO5C,ECrEY,SAAoC,SAAA,G,IAC/C,SACA,yBACA,qBACA,iBACA,eAEM,EAAgB,iBACpB,EAAK,cAAgB,EAAK,GAC1B,EAAK,EACL,EAAK,QAEP,OACE,6BAAA,KAAG,UAAW,SAAO,WAAY,SAAU,GACzC,6BAAC,WAAD,CACE,EAAG,EAAK,GACR,EAAG,EAAK,EACR,MAAO,EAAK,GAAK,EAAK,GACtB,OAAQ,EAAK,OACb,UAAW,EAAK,UAChB,cAAe,EAAK,cACpB,gBAAiB,EAAK,gBACtB,OAAQ,EAAK,OACb,WAAY,EACZ,YAAa,SAAA,GACX,GAAoB,EAAa,OAAQ,EAAM,E,IAGnD,6BAAA,KAAG,UAAU,eACV,GACC,6BAAC,kBAAD,CACE,cAAe,EACf,YAAa,SAAA,GACX,EAAa,WAAY,EAAM,E,KAO5C,E,kEC3CY,UAAqC,SAAA,G,IAChD,SACA,qBACA,iBACA,eAEM,EAAS,cAAgB,EAAK,GAAmB,KAAd,EAAK,QAA/B,WACX,EAAK,EAAkB,IAAd,EAAK,QADH,IAQf,OACE,6BAAA,KAAG,SAAU,EAAG,UAAW,SAAO,kBAChC,6BAAA,QACE,KARG,EACH,EAAK,OAAO,wBACZ,EAAK,OAAO,gBAOZ,EAAG,EAAK,GACR,MAAO,EAAK,OACZ,EAAG,EAAK,EACR,OAAQ,EAAK,OACb,GAAI,EAAK,gBACT,GAAI,EAAK,gBACT,UAAW,EACX,UAAW,SAAO,oBAClB,YAAa,SAAA,GACX,GAAoB,EAAa,OAAQ,EAAM,E,IAKxD,E,kFChCY,QAAmC,SAAA,G,IAAG,SAC3C,EADiD,aAEnD,EAAK,OAAO,wBACZ,EAAK,OAAO,gBACV,EAAc,EAAK,GAAK,EAAK,GAEnC,OACE,6BAAA,KAAG,SAAU,EAAG,UAAW,SAAO,gBAChC,6BAAA,QACE,KAAM,EACN,EAAG,EAAK,GACR,MAAO,EACP,EAAG,EAAK,EACR,OAAQ,EAAK,OACb,GAAI,EAAK,gBACT,GAAI,EAAK,gBACT,UAAW,SAAO,oBAIzB,E,+ECCY,SAAoC,SAAA,GAC/C,IAAA,EAAA,SAAA,GASK,GARH,EADF,EACE,KACA,EAFF,EAEE,YACA,EAHF,EAGE,SACA,EAJF,EAIE,WACA,EALF,EAKE,WACA,EANF,EAME,IACA,EAPF,EAOE,aAII,EAAU,aAAuB,MACvC,EAAgC,eAAsB,6BAAA,aAA/C,EAAP,EAAA,GAAiB,EAAjB,EAAA,GACA,EAAwC,gBAAS,GAA1C,EAAP,EAAA,GAAqB,EAArB,EAAA,GAEA,iBAAU,WACR,OAAQ,EAAK,cACX,IAAK,YACH,EAAY,6BAAC,UAAD,OAAA,OAAA,GAAe,KAC3B,MACF,IAAK,UACH,EAAY,6BAAC,QAAD,OAAA,OAAA,GAAa,KACzB,MACF,IAAK,YACH,EAAY,6BAAC,SAAD,OAAA,OAAA,GAAc,KAC1B,MACF,QACE,EAAY,6BAAC,IAAD,OAAA,OAAA,GAAS,K,GAGxB,CAAC,EAAM,IAEV,iBAAU,WACJ,EAAQ,SACV,EAAgB,EAAQ,QAAQ,UAAU,MAAQ,EAAK,GAAK,EAAK,G,GAElE,CAAC,EAAS,IAEb,IACQ,EACA,EAgBR,OACE,6BAAA,K,yBAAsB,EAAK,GACzB,UAAW,SAAA,GACT,GACO,WADC,EAAE,IAEF,GAAU,EAAa,SAAU,EAAM,GAI/C,EAAE,iB,EAEJ,aAAc,SAAA,GACZ,EAAa,aAAc,EAAM,E,EAEnC,aAAc,SAAA,GACZ,EAAa,aAAc,EAAM,E,EAEnC,cAAe,SAAA,GACb,EAAa,WAAY,EAAM,E,EAEjC,QAAS,SAAA,GACP,EAAa,QAAS,EAAM,E,EAE9B,QAAS,WACP,EAAa,SAAU,E,GAGxB,EACc,YAAd,EAAK,MACJ,6BAAA,QACE,GA/CA,EAAQ,EAAK,GAAK,EAAK,GACvB,EAAW,EAAK,YAAY,OAAS,EACvC,EACK,EAAK,GAAa,GAAR,EAEf,GAAO,EAAQ,QAEf,EAAK,GACL,EAAQ,QAAQ,UAAU,MAC1B,GAAe,EACD,GAAd,EAGK,EAAK,GAAK,EAAQ,GAAe,EAAyB,GAAd,GAmC/C,EAAG,EAAK,EAAiB,GAAb,EACZ,UACE,EACI,EAAK,QAAU,MAAM,SAA6B,MAAM,mBACtC,MAAM,gBAE9B,IAAK,GAEJ,EAAK,MAIf,EC3FY,iBAAoD,SAAA,G,MAC/D,UACA,UACA,eACA,iBACA,cACA,gBACA,aACA,QACA,eACA,eACA,gBACA,eACA,aACA,QACA,kBACA,kBACA,oBACA,iBACA,qBACA,kBACA,YACA,aAEM,EAAQ,SAAH,QAAA,EAAG,EAAK,eAAR,IAAA,OAAA,EAAG,EAAc,iBAC5B,EAA0B,eAAS,GAA5B,EAAP,EAAA,GAAc,EAAd,EAAA,GACA,EAAgD,eAAS,GAAlD,EAAP,EAAA,GAAyB,EAAzB,EAAA,GACA,EAAgC,gBAAS,GAAlC,EAAP,EAAA,GAAiB,EAAjB,EAAA,GAGA,iBAAU,WACR,IAAM,EACJ,EAAM,GAAG,UACT,EAAM,GAAG,UACsB,GAA/B,EAAM,GAAG,oBAA2B,IACL,GAA/B,EAAM,GAAG,oBAA2B,IAEtC,EADkB,EAAW,EAAe,E,GAE3C,CAAC,EAAa,EAAO,IAExB,iBAAU,WACR,IAAM,EAAe,SAAU,GAAV,I,MACnB,IAAK,EAAW,cAAgB,GAAU,YAAK,QAAS,OAAA,QAAA,UACxD,EAAM,iBAEN,EAAM,EAAI,EAAM,QAChB,IAAM,EAAS,EAAM,gBACnB,SADa,QAAA,EACb,EAAK,QAAQ,sBADA,IAAA,OAAA,EACb,EAA6B,WAG/B,EAAmC,0BACjC,EAAO,EACP,EAAW,OACX,EAAW,YACX,EACA,EACA,EACA,GAPM,EAAR,EAAQ,UAAW,EAAnB,EAAmB,Y,OASf,GACF,EAAc,CAAE,OAAQ,EAAW,OAAQ,gB,kBAnB1B,MAAA,GAAA,OAAA,QAAA,OAAA,E,GA6FlB,GACsB,SAAtB,EAAW,QACY,QAAtB,EAAW,QACW,UAAtB,EAAW,QACW,aAAtB,EAAW,QAJb,MAKA,MAAK,UAEL,EAAI,QAAQ,iBAAiB,YAAa,GAC1C,EAAI,QAAQ,iBAAiB,WA9EZ,SAAb,EAAuB,GAAV,I,mBAgEZ,GACH,EAAc,E,EAhER,EAA8C,EAA9C,OAAQ,EAAsC,EAAtC,qBAAsB,EAAgB,EAAhB,YACtC,KAAK,GAAgB,GAAU,WAAK,SAAY,GAC9C,OAAA,QAAA,UACF,EAAM,iBAEN,EAAM,EAAI,EAAM,QAChB,IAAM,EAAS,EAAM,gBACnB,SADa,QAAA,EACb,EAAK,QAAQ,sBADA,IAAA,OAAA,EACb,EAA6B,WAEV,EAAmB,0BACtC,EAAO,EACP,EACA,EACA,EACA,EACA,EACA,GAPM,YAUF,EACJ,EAAqB,QAAU,EAAe,OAC9C,EAAqB,MAAQ,EAAe,KAC5C,EAAqB,WAAa,EAAe,SAGnD,EAAI,QAAQ,oBAAoB,YAAa,GAC7C,EAAI,QAAQ,oBAAoB,UAAW,GAC3C,EAAc,CAAE,OAAQ,KACxB,GAAY,GAGZ,IAAI,GAAmB,E,iBAET,SAAX,GAAgC,QAAX,GAA+B,UAAX,IAC1C,GACA,G,yBAEI,OAAA,QAAA,QACmB,EACnB,EACA,EAAe,cAHf,MAAA,SACI,QAIS,IAAX,IACF,EAAmB,E,kBAGrB,GAAmB,C,wEAEZ,GAAoB,G,yBACzB,OAAA,QAAA,QACmB,EACnB,EACA,EAAe,cAHf,MAAA,SACI,QAIS,IAAX,IACF,EAAmB,E,kBAGrB,GAAmB,C,kJA3DN,MAAA,GAAA,OAAA,QAAA,OAAA,E,KA+EjB,GAAY,G,GAEb,CACD,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAMF,IAAM,EAAmB,SACvB,EACA,EACA,GAHuB,I,qCAKlB,E,qBAMI,gBAAgB,GAAD,C,oBACP,WAAX,EAAW,C,oBACT,G,yBACE,OAAA,QAAA,QACmB,EAAS,IAD5B,MAAA,SACI,QACS,IAAX,GAAwB,GAC1B,EAAc,CAAE,SAAQ,YAAa,G,gBAEhC,GACP,QAAQ,MAAM,oBAAsB,E,kJAMvC,GAAe,eAAX,EACF,EAAW,QACd,EAAc,CACZ,SACA,YAAa,EACb,qBAAsB,SAGrB,GAAe,eAAX,EACiB,eAAtB,EAAW,QACb,EAAc,CAAE,OAAQ,UAErB,GAAe,aAAX,EACP,GAAiB,EAAc,QAC5B,GAAe,UAAX,EACP,GAAW,EAAQ,QAGlB,GAAe,SAAX,EAAmB,KAAA,EAC1B,GAAK,YAAK,UAAY,EAAO,OAC7B,EAAM,EAAI,EAAM,QAChB,IAAM,EAAS,EAAM,gBAAN,QAAA,EACb,EAAI,QAAQ,sBADC,IAAA,OAAA,EACb,EAA4B,WAE9B,EAAoB,EAAO,EAAI,EAAK,IACpC,EAAc,CACZ,SACA,YAAa,EACb,qBAAsB,G,MAGxB,EAAc,CACZ,SACA,YAAa,EACb,qBAAsB,G,IAtDT,WAAX,GACF,EAAgB,EAAK,G,KAPF,MAAA,GAAA,OAAA,QAAA,OAAA,E,GAiEnB,EAAe,EAAM,QAAO,SAAA,GAAC,OAAI,EAAE,W,IAEzC,OACE,6BAAA,KAAG,UAAU,WACX,6BAAA,KAAG,UAAU,SAAS,KAAM,EAAY,OAAQ,GAC7C,EAAa,KAAI,SAAA,GAChB,OAAO,EAAK,YAAY,KAAI,SAAA,GAC1B,OACE,6BAAC,MAAD,CACE,IAAG,cAAgB,EAAK,GAArB,OAA8B,EAAM,EAAM,OAAO,GACpD,SAAU,EACV,OAAQ,EAAM,EAAM,OACpB,UAAW,EACX,WAAY,EACZ,YAAa,EACb,IAAK,G,QAMf,6BAAA,KAAG,UAAU,MAAM,WAAY,EAAY,SAAU,GAClD,EAAa,KAAI,SAAA,GAChB,OACE,6BAAC,SAAD,CACE,KAAM,EACN,YAAa,EACb,WAAY,EACZ,uBAAwB,IAAqB,EAAK,WAClD,mBAAoB,IAAiB,EAAK,WAC1C,UAAW,EAAK,WAChB,aAAc,EACd,IAAK,EAAK,GACV,aAAc,GAAgB,EAAK,KAAO,EAAa,GACvD,IAAK,G,KAOlB,E,yFClSY,UAAsC,SAAA,G,IACjD,cACA,kBACA,aACA,gBAEM,EAAc,aAAsB,MACpC,EAAyB,aAAuB,MAChD,EAA4B,aAAuB,MACnD,EAAqB,aAAqB,MAC1C,EAAW,SAAA,GAAQ,EAAR,CAAkB,IAAK,IAWxC,OATA,iBAAU,WACR,GAAI,EAAmB,QAAS,CAC9B,IAAM,EAAiB,oBACnB,GACF,EAAmB,QAAQ,SAAS,EAAgB,E,IAGvD,CAAC,EAAU,WAGZ,6BAAA,OACE,GAAG,gCACH,UAAW,SAAO,uBAClB,IAAK,EACL,IAAI,OAEJ,6BAAC,gBAAD,CAAiB,gBAAgB,EAAO,SAAU,GAChD,6BAAA,OACE,MAAM,6BACN,MAAO,EAAU,SACjB,OAAQ,EAAc,aACtB,WAAY,EAAS,YAErB,6BAAC,SAAD,OAAA,OAAA,GAAc,KAEhB,6BAAA,OACE,IAAK,EACL,UAAW,SAAO,oBAClB,MACE,EACI,CAAE,OAAQ,EAAa,MAAO,EAAU,UACxC,CAAE,MAAO,EAAU,WAGzB,6BAAA,OACE,MAAM,6BACN,MAAO,EAAU,SACjB,OAAQ,EAAS,UAAY,EAAS,MAAM,OAC5C,WAAY,EAAS,WACrB,IAAK,GAEL,6BAAC,KAAD,OAAA,OAAA,GAAU,IACV,6BAAC,iBAAD,OAAA,OAAA,GAAsB,OAMjC,EAED,SAAS,oBACP,IAAM,EAAe,SAAS,cAAc,+BACtC,EAAS,aAAH,EAAG,EAAc,aAAa,KAC1C,GAAI,EAAQ,CACV,IAAI,GAAiB,EACf,EAAa,aAAH,EAAG,EAAc,aAAa,SAI9C,OAHI,IACF,IAAkB,EAAa,GAE1B,C,CAGV,C,IChEY,MAA6C,SAAA,G,IACxD,U,IACA,0BAAe,GAAA,E,IACf,yBAAc,GAAA,E,IACd,2BAAgB,QAAA,E,IAChB,uBAAY,GAAA,E,IACZ,yBAAc,EAAA,E,IACd,sBAAW,iBAAS,M,IACpB,2BAAgB,EAAA,E,IAChB,oBAAS,QAAA,E,IACT,qBAAU,GAAA,E,IACV,6BAAkB,EAAA,E,IAClB,8BAAmB,UAAA,E,IACnB,sCAA2B,UAAA,E,IAC3B,gCAAqB,UAAA,E,IACrB,wCAA6B,UAAA,E,IAC7B,kCAAuB,UAAA,E,IACvB,0CAA+B,UAAA,E,IAC/B,oCAAyB,UAAA,E,IACzB,4CAAiC,UAAA,E,IACjC,sCAA2B,UAAA,E,IAC3B,8CAAmC,UAAA,E,IACnC,kBAAM,E,IACN,yBAAc,EAAA,E,IACd,sBAAW,IAAA,E,IACX,wBAAa,OAAA,E,IACb,wBAAa,kFAAA,E,IACb,sBAAW,OAAA,E,KACX,2BAAc,GAAA,G,KACd,0BAAa,2BAAA,GACb,c,KACA,8BAAiB,0B,KACjB,8BAAiB,yB,KACjB,6BAAgB,wBAChB,kBACA,sBACA,mBACA,aACA,cACA,cACA,qBAEM,GAAa,aAAuB,MACpC,GAAc,aAAuB,MAC3C,GAAkC,gBAAoB,WACpD,IAAA,EAA6B,eAAe,EAAO,EAAU,GAAtD,EAAP,EAAA,GAAkB,EAAlB,EAAA,GACA,MAAO,CAAE,WAAU,MAAO,UAAU,EAAW,EAAS,G,IAFnD,GAAP,GAAA,GAAkB,GAAlB,GAAA,GAIA,GAA8C,oBAC5C,GADK,GAAP,GAAA,GAAwB,GAAxB,GAAA,GAIA,GAAgC,eAAoB,IAA7C,GAAP,GAAA,GAAiB,GAAjB,GAAA,GACA,GAAoC,eAAqB,CACvD,OAAQ,KADH,GAAP,GAAA,GAAmB,GAAnB,GAAA,GAGM,GAAa,eACjB,kBAAO,EAAY,EAAW,G,GAC9B,CAAC,EAAW,IAGd,GAAwC,iBAAjC,GAAP,GAAA,GAAqB,GAArB,GAAA,GACA,GAAoC,eAAyB,MAAtD,GAAP,GAAA,GAAmB,GAAnB,GAAA,GAEM,GAAW,GAAU,MAAM,OAAS,EAG1C,iBAAU,WACR,IAAI,EAMJ,GAJE,EADE,GACc,kBAAkB,GAElB,GAEY,KAAK,WACnC,IAAA,EAA6B,eAC3B,EACA,EACA,GAHK,EAAP,EAAA,GAAkB,EAAlB,EAAA,GAKI,EAAW,UAAU,EAAW,EAAS,GAE7C,GAAa,CAAE,MAAO,EAAU,aAChC,GACE,kBACE,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,G,GAGH,CACD,EACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAGF,iBAAU,WACR,GACE,IAAa,GAAU,WACrB,KAAa,IACZ,KAAY,cAAA,EAAA,GAAiB,aAAc,GAAS,WACvD,CACA,IAAM,EAAQ,GAAU,MAOxB,IAAe,IAND,EAAM,WAClB,SAAC,EAAG,GAAJ,OACE,GAAS,WAAa,EAAE,WACxB,EAAI,IAAM,EAAM,QAChB,GAAS,UAAY,EAAM,EAAI,GAAG,S,IAGpC,OAEF,GAAmB,G,IAEpB,CACD,GACA,EACA,GAAU,MACV,GAAU,SACV,EACA,GACA,KAGF,iBAAU,WACR,IAAQ,EAAwB,GAAxB,YAAa,EAAW,GAAX,OACrB,GAAI,EACF,GAAe,WAAX,EACF,GAAc,CAAE,OAAQ,KACxB,GAAY,GAAS,QAAO,SAAA,GAAC,OAAI,EAAE,KAAO,EAAY,E,UACjD,GACM,SAAX,GACW,QAAX,GACW,UAAX,GACW,aAAX,EACA,CACA,IAAM,EAAgB,GAAS,MAAK,SAAA,GAAC,OAAI,EAAE,KAAO,EAAY,E,IAC9D,GACE,IACC,EAAc,MAAM,YAAc,EAAY,MAAM,WACnD,EAAc,IAAI,YAAc,EAAY,IAAI,WAChD,EAAc,WAAa,EAAY,UACzC,CAEA,IAAM,EAAc,GAAS,KAAI,SAAA,GAAC,OAChC,EAAE,KAAO,EAAY,GAAK,EAAc,C,IAE1C,GAAY,E,KAIjB,CAAC,GAAY,KAEhB,iBAAU,WACJ,KACF,GAAY,GAAS,KAAI,SAAA,GAAC,OAAK,EAAE,KAAO,GAAW,GAAK,EAAI,E,KAC5D,GAAc,M,GAEf,CAAC,GAAY,KAKhB,IAAM,GAAqB,SAAC,GAC1B,IAAM,EAAkB,GAAS,MAAK,SAAA,GAAC,OAAI,EAAE,KAAO,C,IAC9C,EAAkB,GAAS,MAC/B,SAAA,GAAC,QAAM,IAAgB,EAAE,KAAO,GAAa,E,IAE3C,KACE,GACF,GAAS,GAAiB,GAExB,GACF,GAAS,GAAiB,IAG9B,GAAgB,E,EAiBZ,GAAuB,CAC3B,cACA,YACA,MAAO,EACP,YACA,MAAO,GAAU,MACjB,cACA,OAEI,GAA+B,CACnC,aACA,SACA,WACA,eACA,cACA,aACA,WACA,OAEI,GAAkC,CACtC,MAAO,GACP,MAAO,GAAU,MACjB,cACA,gBACA,YACA,cACA,cACA,aACA,WACA,aACA,WACA,eACA,YACA,MACA,iBACA,iBACA,gBAAiB,GACjB,gBACA,oBACA,iBACA,WACA,aAGI,GAA4B,CAChC,YACA,SAAU,EACV,aACA,WACA,MAAO,GACP,SACA,eACA,cACA,yBAA0B,SAAO,oBACjC,gBACA,eACA,gBAAiB,GACjB,gBAxE0B,SAAC,GACvB,SAAyC,IAAtB,EAAK,cAC1B,GAAe,SAAA,GAAM,EAAN,CAAY,cAAe,EAAK,e,EAuEjD,2BAnEiC,SAAC,GAClC,IAAM,EAAe,GAAS,MAAK,SAAA,GAAC,OAAI,EAAE,KAAO,C,IACjD,GAAI,EAAc,CAChB,IAAM,EAAkB,SAAS,cAAc,4DACzC,EAAU,EAAa,GAAK,GAClC,WAAiB,SAAS,EAAU,EAAI,EAAI,EAAS,E,GA+DvD,kBACA,kBAEF,OACE,6BAAA,WACE,6BAAA,OACE,UAAW,SAAO,QAClB,SAAU,EACV,IAAK,IAEJ,GAAiB,6BAAC,SAAD,OAAA,OAAA,GAAc,KAChC,6BAAC,UAAD,CACE,UAAW,GACX,cAAe,GACf,SAAU,GACV,YAAa,IAEd,GAAW,aACV,6BAAC,QAAD,CACE,WAAY,EACZ,SAAU,EACV,KAAM,GAAW,YACjB,eAAgB,MAM3B,E","file":"/npm/objectivity-gantt-task-react@0.6.1/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/objectivity-gantt-task-react@0.6.1/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","export enum ViewMode {\r\n  Hour = \"Hour\",\r\n  QuarterDay = \"Quarter Day\",\r\n  HalfDay = \"Half Day\",\r\n  Day = \"Day\",\r\n  /** ISO-8601 week */\r\n  Week = \"Week\",\r\n  Month = \"Month\",\r\n  Year = \"Year\",\r\n}\r\nexport type TaskType = \"task\" | \"milestone\" | \"project\";\r\nexport interface Task {\r\n  id: string;\r\n  type: TaskType;\r\n  name: string;\r\n  start: Date;\r\n  end: Date;\r\n  /**\r\n   * From 0 to 100\r\n   */\r\n  progress: number;\r\n  styles?: {\r\n    backgroundColor?: string;\r\n    backgroundSelectedColor?: string;\r\n    progressColor?: string;\r\n    progressSelectedColor?: string;\r\n    icon?: string;\r\n  };\r\n  isDisabled?: boolean;\r\n  project?: string;\r\n  dependencies?: string[];\r\n  hideChildren?: boolean;\r\n  displayOrder?: number;\r\n\r\n  additionalInfo?: string;\r\n  tooltip?: string;\r\n\r\n  hideBarTask?: boolean;\r\n}\r\n\r\nexport interface EventOption {\r\n  /**\r\n   * Time step value for date changes.\r\n   */\r\n  timeStep?: number;\r\n  /**\r\n   * Invokes on bar select on unselect.\r\n   */\r\n  onSelect?: (task: Task, isSelected: boolean) => void;\r\n  /**\r\n   * Invokes on bar double click.\r\n   */\r\n  onDoubleClick?: (task: Task) => void;\r\n  /**\r\n   * Invokes on bar click.\r\n   */\r\n  onClick?: (task: Task) => void;\r\n  /**\r\n   * Invokes on end and start time change. Chart undoes operation if method return false or error.\r\n   */\r\n  onDateChange?: (\r\n    task: Task,\r\n    children: Task[]\r\n  ) => void | boolean | Promise<void> | Promise<boolean>;\r\n  /**\r\n   * Invokes on progress change. Chart undoes operation if method return false or error.\r\n   */\r\n  onProgressChange?: (\r\n    task: Task,\r\n    children: Task[]\r\n  ) => void | boolean | Promise<void> | Promise<boolean>;\r\n  /**\r\n   * Invokes on delete selected task. Chart undoes operation if method return false or error.\r\n   */\r\n  onDelete?: (task: Task) => void | boolean | Promise<void> | Promise<boolean>;\r\n  /**\r\n   * Invokes on expander on task list\r\n   */\r\n  onExpanderClick?: (task: Task) => void;\r\n}\r\n\r\nexport interface DisplayOption {\r\n  viewMode?: ViewMode;\r\n  viewDate?: Date;\r\n  preStepsCount?: number;\r\n  /**\r\n   * Specifies the month name language. Able formats: ISO 639-2, Java Locale\r\n   */\r\n  locale?: string;\r\n  rtl?: boolean;\r\n}\r\n\r\nexport interface StylingOption {\r\n  headerHeight?: number;\r\n  columnWidth?: number;\r\n  listCellWidth?: string;\r\n  rowHeight?: number;\r\n  ganttHeight?: number;\r\n  barCornerRadius?: number;\r\n  handleWidth?: number;\r\n  fontFamily?: string;\r\n  fontSize?: string;\r\n  /**\r\n   * How many of row width can be taken by task.\r\n   * From 0 to 100\r\n   */\r\n  barFill?: number;\r\n  barProgressColor?: string;\r\n  barProgressSelectedColor?: string;\r\n  barBackgroundColor?: string;\r\n  barBackgroundSelectedColor?: string;\r\n  projectProgressColor?: string;\r\n  projectProgressSelectedColor?: string;\r\n  projectBackgroundColor?: string;\r\n  projectBackgroundSelectedColor?: string;\r\n  milestoneBackgroundColor?: string;\r\n  milestoneBackgroundSelectedColor?: string;\r\n  arrowColor?: string;\r\n  arrowIndent?: number;\r\n  todayColor?: string;\r\n  TooltipContent?: React.FC<{\r\n    task: Task;\r\n    fontSize: string;\r\n    fontFamily: string;\r\n  }>;\r\n  TaskListHeader?: React.FC<{\r\n    headerHeight: number;\r\n    rowWidth: string;\r\n    fontFamily: string;\r\n    fontSize: string;\r\n  }>;\r\n  TaskListTable?: React.FC<{\r\n    rowHeight: number;\r\n    rowWidth: string;\r\n    fontFamily: string;\r\n    fontSize: string;\r\n    locale: string;\r\n    tasks: Task[];\r\n    selectedTaskId: string;\r\n    /**\r\n     * Sets selected task by id\r\n     */\r\n    setSelectedTask: (taskId: string) => void;\r\n    onExpanderClick: (task: Task) => void;\r\n    scrollToSelectedTaskOnList: (taskId: string) => void;\r\n  }>;\r\n}\r\n\r\nexport interface GanttProps extends EventOption, DisplayOption, StylingOption {\r\n  tasks: Task[];\r\n}\r\n","import { Task, ViewMode } from \"../types/public-types\";\r\nimport DateTimeFormatOptions = Intl.DateTimeFormatOptions;\r\nimport DateTimeFormat = Intl.DateTimeFormat;\r\n\r\ntype DateHelperScales =\r\n  | \"year\"\r\n  | \"month\"\r\n  | \"day\"\r\n  | \"hour\"\r\n  | \"minute\"\r\n  | \"second\"\r\n  | \"millisecond\";\r\n\r\nconst intlDTCache = {};\r\nexport const getCachedDateTimeFormat = (\r\n  locString: string | string[],\r\n  opts: DateTimeFormatOptions = {}\r\n): DateTimeFormat => {\r\n  const key = JSON.stringify([locString, opts]);\r\n  let dtf = intlDTCache[key];\r\n  if (!dtf) {\r\n    dtf = new Intl.DateTimeFormat(locString, opts);\r\n    intlDTCache[key] = dtf;\r\n  }\r\n  return dtf;\r\n};\r\n\r\nexport const addToDate = (\r\n  date: Date,\r\n  quantity: number,\r\n  scale: DateHelperScales\r\n) => {\r\n  const newDate = new Date(\r\n    date.getFullYear() + (scale === \"year\" ? quantity : 0),\r\n    date.getMonth() + (scale === \"month\" ? quantity : 0),\r\n    date.getDate() + (scale === \"day\" ? quantity : 0),\r\n    date.getHours() + (scale === \"hour\" ? quantity : 0),\r\n    date.getMinutes() + (scale === \"minute\" ? quantity : 0),\r\n    date.getSeconds() + (scale === \"second\" ? quantity : 0),\r\n    date.getMilliseconds() + (scale === \"millisecond\" ? quantity : 0)\r\n  );\r\n  return newDate;\r\n};\r\n\r\nexport const startOfDate = (date: Date, scale: DateHelperScales) => {\r\n  const scores = [\r\n    \"millisecond\",\r\n    \"second\",\r\n    \"minute\",\r\n    \"hour\",\r\n    \"day\",\r\n    \"month\",\r\n    \"year\",\r\n  ];\r\n\r\n  const shouldReset = (_scale: DateHelperScales) => {\r\n    const maxScore = scores.indexOf(scale);\r\n    return scores.indexOf(_scale) <= maxScore;\r\n  };\r\n  const newDate = new Date(\r\n    date.getFullYear(),\r\n    shouldReset(\"year\") ? 0 : date.getMonth(),\r\n    shouldReset(\"month\") ? 1 : date.getDate(),\r\n    shouldReset(\"day\") ? 0 : date.getHours(),\r\n    shouldReset(\"hour\") ? 0 : date.getMinutes(),\r\n    shouldReset(\"minute\") ? 0 : date.getSeconds(),\r\n    shouldReset(\"second\") ? 0 : date.getMilliseconds()\r\n  );\r\n  return newDate;\r\n};\r\n\r\nexport const ganttDateRange = (\r\n  tasks: Task[],\r\n  viewMode: ViewMode,\r\n  preStepsCount: number\r\n) => {\r\n  const filteredTasks = tasks.filter(t => t.hideBarTask ? false : true);\r\n\r\n  if (filteredTasks.length === 0) {\r\n    const now = new Date(Date.now());\r\n    return [now, now];\r\n  }\r\n\r\n  let newStartDate: Date = filteredTasks[0].start;\r\n  let newEndDate: Date = filteredTasks[0].start;\r\n  for (const task of filteredTasks) {\r\n    if (task.start < newStartDate) {\r\n      newStartDate = task.start;\r\n    }\r\n    if (task.end > newEndDate) {\r\n      newEndDate = task.end;\r\n    }\r\n  }\r\n  switch (viewMode) {\r\n    case ViewMode.Year:\r\n      newStartDate = addToDate(newStartDate, -1, \"year\");\r\n      newStartDate = startOfDate(newStartDate, \"year\");\r\n      newEndDate = addToDate(newEndDate, 1, \"year\");\r\n      newEndDate = startOfDate(newEndDate, \"year\");\r\n      break;\r\n    case ViewMode.Month:\r\n      newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"month\");\r\n      newStartDate = startOfDate(newStartDate, \"month\");\r\n      newEndDate = addToDate(newEndDate, 1, \"year\");\r\n      newEndDate = startOfDate(newEndDate, \"year\");\r\n      break;\r\n    case ViewMode.Week:\r\n      newStartDate = startOfDate(newStartDate, \"day\");\r\n      newStartDate = addToDate(\r\n        getMonday(newStartDate),\r\n        -7 * preStepsCount,\r\n        \"day\"\r\n      );\r\n      newEndDate = startOfDate(newEndDate, \"day\");\r\n      newEndDate = addToDate(newEndDate, 1.5, \"month\");\r\n      break;\r\n    case ViewMode.Day:\r\n      newStartDate = startOfDate(newStartDate, \"day\");\r\n      newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\r\n      newEndDate = startOfDate(newEndDate, \"day\");\r\n      newEndDate = addToDate(newEndDate, 19, \"day\");\r\n      break;\r\n    case ViewMode.QuarterDay:\r\n      newStartDate = startOfDate(newStartDate, \"day\");\r\n      newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\r\n      newEndDate = startOfDate(newEndDate, \"day\");\r\n      newEndDate = addToDate(newEndDate, 66, \"hour\"); // 24(1 day)*3 - 6\r\n      break;\r\n    case ViewMode.HalfDay:\r\n      newStartDate = startOfDate(newStartDate, \"day\");\r\n      newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"day\");\r\n      newEndDate = startOfDate(newEndDate, \"day\");\r\n      newEndDate = addToDate(newEndDate, 108, \"hour\"); // 24(1 day)*5 - 12\r\n      break;\r\n    case ViewMode.Hour:\r\n      newStartDate = startOfDate(newStartDate, \"hour\");\r\n      newStartDate = addToDate(newStartDate, -1 * preStepsCount, \"hour\");\r\n      newEndDate = startOfDate(newEndDate, \"day\");\r\n      newEndDate = addToDate(newEndDate, 1, \"day\");\r\n      break;\r\n  }\r\n  return [newStartDate, newEndDate];\r\n};\r\n\r\nexport const seedDates = (\r\n  startDate: Date,\r\n  endDate: Date,\r\n  viewMode: ViewMode\r\n) => {\r\n  let currentDate: Date = new Date(startDate);\r\n  const dates: Date[] = [currentDate];\r\n  while (currentDate < endDate) {\r\n    switch (viewMode) {\r\n      case ViewMode.Year:\r\n        currentDate = addToDate(currentDate, 1, \"year\");\r\n        break;\r\n      case ViewMode.Month:\r\n        currentDate = addToDate(currentDate, 1, \"month\");\r\n        break;\r\n      case ViewMode.Week:\r\n        currentDate = addToDate(currentDate, 7, \"day\");\r\n        break;\r\n      case ViewMode.Day:\r\n        currentDate = addToDate(currentDate, 1, \"day\");\r\n        break;\r\n      case ViewMode.HalfDay:\r\n        currentDate = addToDate(currentDate, 12, \"hour\");\r\n        break;\r\n      case ViewMode.QuarterDay:\r\n        currentDate = addToDate(currentDate, 6, \"hour\");\r\n        break;\r\n      case ViewMode.Hour:\r\n        currentDate = addToDate(currentDate, 1, \"hour\");\r\n        break;\r\n    }\r\n    dates.push(currentDate);\r\n  }\r\n  return dates;\r\n};\r\n\r\nexport const getLocaleMonth = (date: Date, locale: string) => {\r\n  let bottomValue = getCachedDateTimeFormat(locale, {\r\n    month: \"long\",\r\n  }).format(date);\r\n  bottomValue = bottomValue.replace(\r\n    bottomValue[0],\r\n    bottomValue[0].toLocaleUpperCase()\r\n  );\r\n  return bottomValue;\r\n};\r\n\r\nexport const getLocalDayOfWeek = (\r\n  date: Date,\r\n  locale: string,\r\n  format?: \"long\" | \"short\" | \"narrow\" | undefined\r\n) => {\r\n  let bottomValue = getCachedDateTimeFormat(locale, {\r\n    weekday: format,\r\n  }).format(date);\r\n  bottomValue = bottomValue.replace(\r\n    bottomValue[0],\r\n    bottomValue[0].toLocaleUpperCase()\r\n  );\r\n  return bottomValue;\r\n};\r\n\r\n/**\r\n * Returns monday of current week\r\n * @param date date for modify\r\n */\r\nconst getMonday = (date: Date) => {\r\n  const day = date.getDay();\r\n  const diff = date.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday\r\n  return new Date(date.setDate(diff));\r\n};\r\n\r\nexport const getWeekNumberISO8601 = (date: Date) => {\r\n  const tmpDate = new Date(date.valueOf());\r\n  const dayNumber = (tmpDate.getDay() + 6) % 7;\r\n  tmpDate.setDate(tmpDate.getDate() - dayNumber + 3);\r\n  const firstThursday = tmpDate.valueOf();\r\n  tmpDate.setMonth(0, 1);\r\n  if (tmpDate.getDay() !== 4) {\r\n    tmpDate.setMonth(0, 1 + ((4 - tmpDate.getDay() + 7) % 7));\r\n  }\r\n  const weekNumber = (\r\n    1 + Math.ceil((firstThursday - tmpDate.valueOf()) / 604800000)\r\n  ).toString();\r\n\r\n  if (weekNumber.length === 1) {\r\n    return `0${weekNumber}`;\r\n  } else {\r\n    return weekNumber;\r\n  }\r\n};\r\n\r\nexport const getDaysInMonth = (month: number, year: number) => {\r\n  return new Date(year, month + 1, 0).getDate();\r\n};\r\n","import React from \"react\";\r\nimport styles from \"./task-list-header.module.css\";\r\n\r\nexport const TaskListHeaderDefault: React.FC<{\r\n  headerHeight: number;\r\n  rowWidth: string;\r\n  fontFamily: string;\r\n  fontSize: string;\r\n}> = ({ headerHeight, fontFamily, fontSize, rowWidth }) => {\r\n  return (\r\n    <div\r\n      className={styles.ganttTable}\r\n      style={{\r\n        fontFamily: fontFamily,\r\n        fontSize: fontSize,\r\n      }}\r\n    >\r\n      <div\r\n        className={styles.ganttTable_Header}\r\n        style={{\r\n          height: headerHeight - 2,\r\n        }}\r\n      >\r\n        <div\r\n          className={styles.ganttTable_HeaderItem}\r\n          style={{\r\n            minWidth: rowWidth,\r\n          }}\r\n        >\r\n          &nbsp;Name\r\n        </div>\r\n        <div\r\n          className={styles.ganttTable_HeaderSeparator}\r\n          style={{\r\n            height: headerHeight * 0.5,\r\n            marginTop: headerHeight * 0.2,\r\n          }}\r\n        />\r\n        <div\r\n          className={styles.ganttTable_HeaderItem}\r\n          style={{\r\n            minWidth: rowWidth,\r\n          }}\r\n        >\r\n          &nbsp;From\r\n        </div>\r\n        <div\r\n          className={styles.ganttTable_HeaderSeparator}\r\n          style={{\r\n            height: headerHeight * 0.5,\r\n            marginTop: headerHeight * 0.25,\r\n          }}\r\n        />\r\n        <div\r\n          className={styles.ganttTable_HeaderItem}\r\n          style={{\r\n            minWidth: rowWidth,\r\n          }}\r\n        >\r\n          &nbsp;To\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n","import React, { useMemo } from \"react\";\r\nimport styles from \"./task-list-table.module.css\";\r\nimport { Task } from \"../../types/public-types\";\r\n\r\nconst localeDateStringCache = {};\r\nconst toLocaleDateStringFactory =\r\n  (locale: string) =>\r\n  (date: Date, dateTimeOptions: Intl.DateTimeFormatOptions) => {\r\n    const key = date.toString();\r\n    let lds = localeDateStringCache[key];\r\n    if (!lds) {\r\n      lds = date.toLocaleDateString(locale, dateTimeOptions);\r\n      localeDateStringCache[key] = lds;\r\n    }\r\n    return lds;\r\n  };\r\nconst dateTimeOptions: Intl.DateTimeFormatOptions = {\r\n  weekday: \"short\",\r\n  year: \"numeric\",\r\n  month: \"long\",\r\n  day: \"numeric\",\r\n};\r\n\r\nexport const TaskListTableDefault: React.FC<{\r\n  rowHeight: number;\r\n  rowWidth: string;\r\n  fontFamily: string;\r\n  fontSize: string;\r\n  locale: string;\r\n  tasks: Task[];\r\n  selectedTaskId: string;\r\n  setSelectedTask: (taskId: string) => void;\r\n  onExpanderClick: (task: Task) => void;\r\n}> = ({\r\n  rowHeight,\r\n  rowWidth,\r\n  tasks,\r\n  fontFamily,\r\n  fontSize,\r\n  locale,\r\n  onExpanderClick,\r\n}) => {\r\n  const toLocaleDateString = useMemo(\r\n    () => toLocaleDateStringFactory(locale),\r\n    [locale]\r\n  );\r\n\r\n  return (\r\n    <div\r\n      className={styles.taskListWrapper}\r\n      style={{\r\n        fontFamily: fontFamily,\r\n        fontSize: fontSize,\r\n      }}\r\n    >\r\n      {tasks.map(t => {\r\n        let expanderSymbol = \"\";\r\n        if (t.hideChildren === false) {\r\n          expanderSymbol = \"▼\";\r\n        } else if (t.hideChildren === true) {\r\n          expanderSymbol = \"▶\";\r\n        }\r\n\r\n        return (\r\n          <div\r\n            className={styles.taskListTableRow}\r\n            style={{ height: rowHeight }}\r\n            key={`${t.id}row`}\r\n          >\r\n            <div\r\n              className={styles.taskListCell}\r\n              style={{\r\n                minWidth: rowWidth,\r\n                maxWidth: rowWidth,\r\n              }}\r\n              title={t.name}\r\n            >\r\n              <div className={styles.taskListNameWrapper}>\r\n                <div\r\n                  className={\r\n                    expanderSymbol\r\n                      ? styles.taskListExpander\r\n                      : styles.taskListEmptyExpander\r\n                  }\r\n                  onClick={() => onExpanderClick(t)}\r\n                >\r\n                  {expanderSymbol}\r\n                </div>\r\n                <div>{t.name}</div>\r\n              </div>\r\n            </div>\r\n            <div\r\n              className={styles.taskListCell}\r\n              style={{\r\n                minWidth: rowWidth,\r\n                maxWidth: rowWidth,\r\n              }}\r\n            >\r\n              &nbsp;{toLocaleDateString(t.start, dateTimeOptions)}\r\n            </div>\r\n            <div\r\n              className={styles.taskListCell}\r\n              style={{\r\n                minWidth: rowWidth,\r\n                maxWidth: rowWidth,\r\n              }}\r\n            >\r\n              &nbsp;{toLocaleDateString(t.end, dateTimeOptions)}\r\n            </div>\r\n          </div>\r\n        );\r\n      })}\r\n    </div>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport ReactTooltip from \"react-tooltip\";\r\nimport { Task } from \"../../types/public-types\";\r\nimport { BarTask } from \"../../types/bar-task\";\r\nimport styles from \"./tooltip.module.css\";\r\n\r\nexport type TooltipProps = {\r\n  task: BarTask;  \r\n  fontSize: string;\r\n  fontFamily: string;\r\n  TooltipContent: React.FC<{\r\n    task: Task;\r\n    fontSize: string;\r\n    fontFamily: string;\r\n  }>;\r\n};\r\nexport const Tooltip: React.FC<TooltipProps> = ({\r\n  task,\r\n  fontSize,\r\n  fontFamily,\r\n  TooltipContent,\r\n}) => {\r\n\r\n  return (  \r\n      <ReactTooltip id={task.id}>\r\n        <TooltipContent task={task} fontSize={fontSize} fontFamily={fontFamily} />\r\n      </ReactTooltip>\r\n  );\r\n};\r\n\r\nexport const StandardTooltipContent: React.FC<{\r\n  task: Task;\r\n  fontSize: string;\r\n  fontFamily: string;\r\n}> = ({ task, fontSize, fontFamily }) => {\r\n  const style = {\r\n    fontSize,\r\n    fontFamily,\r\n  };\r\n  return (\r\n    <div style={style}>\r\n      <b style={{ fontSize: fontSize + 6 }}>{`${task.name\r\n        }: ${task.start.getDate()}-${task.start.getMonth() + 1\r\n        }-${task.start.getFullYear()} - ${task.end.getDate()}-${task.end.getMonth() + 1\r\n        }-${task.end.getFullYear()}`}</b>\r\n      {task.end.getTime() - task.start.getTime() !== 0 && (\r\n        <div className={styles.info}>{`Duration: ${~~(\r\n          (task.end.getTime() - task.start.getTime()) /\r\n          (1000 * 60 * 60 * 24)\r\n        )} day(s)`}</div>\r\n      )}\r\n\r\n      <div className={styles.info}>\r\n        {!!task.progress && `Progress: ${task.progress} %`}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n","import React, { useRef } from \"react\";\r\nimport { BarTask } from \"../../types/bar-task\";\r\nimport { Task } from \"../../types/public-types\";\r\n\r\nexport type TaskListProps = {\r\n  headerHeight: number;\r\n  rowWidth: string;\r\n  fontFamily: string;\r\n  fontSize: string;\r\n  rowHeight: number;\r\n  ganttHeight: number;\r\n  locale: string;\r\n  tasks: Task[];\r\n  taskListRef: React.RefObject<HTMLDivElement>;\r\n  horizontalContainerClass?: string;\r\n  selectedTask: BarTask | undefined;\r\n  setSelectedTask: (task: string) => void;\r\n  onExpanderClick: (task: Task) => void;\r\n  scrollToSelectedTaskOnList: (taskId: string) => void;\r\n  TaskListHeader: React.FC<{\r\n    headerHeight: number;\r\n    rowWidth: string;\r\n    fontFamily: string;\r\n    fontSize: string;\r\n  }>;\r\n  TaskListTable: React.FC<{\r\n    rowHeight: number;\r\n    rowWidth: string;\r\n    fontFamily: string;\r\n    fontSize: string;\r\n    locale: string;\r\n    tasks: Task[];\r\n    selectedTaskId: string;\r\n    setSelectedTask: (taskId: string) => void;\r\n    onExpanderClick: (task: Task) => void;\r\n    scrollToSelectedTaskOnList: (taskId: string) => void;\r\n  }>;\r\n};\r\n\r\nexport const TaskList: React.FC<TaskListProps> = ({\r\n  headerHeight,\r\n  fontFamily,\r\n  fontSize,\r\n  rowWidth,\r\n  rowHeight,\r\n  tasks,\r\n  selectedTask,\r\n  setSelectedTask,\r\n  onExpanderClick,\r\n  scrollToSelectedTaskOnList,\r\n  locale,\r\n  ganttHeight,\r\n  taskListRef,\r\n  horizontalContainerClass,\r\n  TaskListHeader,\r\n  TaskListTable,\r\n}) => {\r\n  const horizontalContainerRef = useRef<HTMLDivElement>(null);\r\n\r\n  const headerProps = {\r\n    headerHeight,\r\n    fontFamily,\r\n    fontSize,\r\n    rowWidth,\r\n  };\r\n  const selectedTaskId = selectedTask ? selectedTask.id : \"\";\r\n  const tableProps = {\r\n    rowHeight,\r\n    rowWidth,\r\n    fontFamily,\r\n    fontSize,\r\n    tasks,\r\n    locale,\r\n    selectedTaskId: selectedTaskId,\r\n    setSelectedTask,\r\n    onExpanderClick,\r\n    scrollToSelectedTaskOnList\r\n  };\r\n\r\n  return (\r\n    <div ref={taskListRef} style={{\r\n      minWidth: rowWidth,\r\n      maxWidth: rowWidth\r\n    }}\r\n    >\r\n      <TaskListHeader {...headerProps} />\r\n      <div\r\n        ref={horizontalContainerRef}\r\n        className={horizontalContainerClass}\r\n        style={ganttHeight ? { height: ganttHeight } : {}}\r\n      >\r\n        <TaskListTable {...tableProps} />\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n","import React, { ReactChild } from \"react\";\r\nimport { Task } from \"../../types/public-types\";\r\nimport { addToDate } from \"../../helpers/date-helper\";\r\nimport styles from \"./grid.module.css\";\r\n\r\nexport type GridBodyProps = {\r\n  tasks: Task[];\r\n  dates: Date[];\r\n  svgWidth: number;\r\n  rowHeight: number;\r\n  columnWidth: number;\r\n  todayColor: string;\r\n  rtl: boolean;\r\n};\r\nexport const GridBody: React.FC<GridBodyProps> = ({\r\n  tasks,\r\n  dates,\r\n  rowHeight,\r\n  svgWidth,\r\n  columnWidth,\r\n  todayColor,\r\n  rtl,\r\n}) => {\r\n  let y = 0;\r\n  const gridRows: ReactChild[] = [];\r\n  const rowLines: ReactChild[] = [\r\n    <line\r\n      key=\"RowLineFirst\"\r\n      x=\"0\"\r\n      y1={0}\r\n      x2={svgWidth}\r\n      y2={0}\r\n      className={styles.gridRowLine}\r\n    />,\r\n  ];\r\n  for (const task of tasks) {\r\n    gridRows.push(\r\n      <rect\r\n        key={\"Row\" + task.id}\r\n        x=\"0\"\r\n        y={y}\r\n        width={svgWidth}\r\n        height={rowHeight}\r\n        className={styles.gridRow}\r\n      />\r\n    );\r\n    rowLines.push(\r\n      <line\r\n        key={\"RowLine\" + task.id}\r\n        x=\"0\"\r\n        y1={y + rowHeight}\r\n        x2={svgWidth}\r\n        y2={y + rowHeight}\r\n        className={styles.gridRowLine}\r\n      />\r\n    );\r\n    y += rowHeight;\r\n  }\r\n\r\n  const now = new Date();\r\n  let tickX = 0;\r\n  const ticks: ReactChild[] = [];\r\n  let today: ReactChild = <rect />;\r\n  for (let i = 0; i < dates.length; i++) {\r\n    const date = dates[i];\r\n    ticks.push(\r\n      <line\r\n        key={date.getTime()}\r\n        x1={tickX}\r\n        y1={0}\r\n        x2={tickX}\r\n        y2={y}\r\n        className={styles.gridTick}\r\n      />\r\n    );\r\n    if (\r\n      (i + 1 !== dates.length &&\r\n        date.getTime() < now.getTime() &&\r\n        dates[i + 1].getTime() >= now.getTime()) ||\r\n      // if current date is last\r\n      (i !== 0 &&\r\n        i + 1 === dates.length &&\r\n        date.getTime() < now.getTime() &&\r\n        addToDate(\r\n          date,\r\n          date.getTime() - dates[i - 1].getTime(),\r\n          \"millisecond\"\r\n        ).getTime() >= now.getTime())\r\n    ) {\r\n      today = (\r\n        <rect\r\n          x={tickX}\r\n          y={0}\r\n          width={columnWidth}\r\n          height={y}\r\n          fill={todayColor}\r\n        />\r\n      );\r\n    }\r\n    // rtl for today\r\n    if (\r\n      rtl &&\r\n      i + 1 !== dates.length &&\r\n      date.getTime() >= now.getTime() &&\r\n      dates[i + 1].getTime() < now.getTime()\r\n    ) {\r\n      today = (\r\n        <rect\r\n          x={tickX + columnWidth}\r\n          y={0}\r\n          width={columnWidth}\r\n          height={y}\r\n          fill={todayColor}\r\n        />\r\n      );\r\n    }\r\n    tickX += columnWidth;\r\n  }\r\n  return (\r\n    <g className=\"gridBody\">\r\n      <g className=\"rows\">{gridRows}</g>\r\n      <g className=\"rowLines\">{rowLines}</g>\r\n      <g className=\"ticks\">{ticks}</g>\r\n      <g className=\"today\">{today}</g>\r\n    </g>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport { GridBody, GridBodyProps } from \"./grid-body\";\r\n\r\nexport type GridProps = GridBodyProps;\r\nexport const Grid: React.FC<GridProps> = props => {\r\n  return (\r\n    <g className=\"grid\">\r\n      <GridBody {...props} />\r\n    </g>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport styles from \"./calendar.module.css\";\r\n\r\ntype TopPartOfCalendarProps = {\r\n  value: string;\r\n  x1Line: number;\r\n  y1Line: number;\r\n  y2Line: number;\r\n  xText: number;\r\n  yText: number;\r\n};\r\n\r\nexport const TopPartOfCalendar: React.FC<TopPartOfCalendarProps> = ({\r\n  value,\r\n  x1Line,\r\n  y1Line,\r\n  y2Line,\r\n  xText,\r\n  yText,\r\n}) => {\r\n  return (\r\n    <g className=\"calendarTop\">\r\n      <line\r\n        x1={x1Line}\r\n        y1={y1Line}\r\n        x2={x1Line}\r\n        y2={y2Line}\r\n        className={styles.calendarTopTick}\r\n        key={value + \"line\"}\r\n      />\r\n      <text\r\n        key={value + \"text\"}\r\n        y={yText}\r\n        x={xText}\r\n        className={styles.calendarTopText}\r\n      >\r\n        {value}\r\n      </text>\r\n    </g>\r\n  );\r\n};\r\n","import React, { ReactChild } from \"react\";\r\nimport { ViewMode } from \"../../types/public-types\";\r\nimport { TopPartOfCalendar } from \"./top-part-of-calendar\";\r\nimport {\r\n  getCachedDateTimeFormat,\r\n  getDaysInMonth,\r\n  getLocalDayOfWeek,\r\n  getLocaleMonth,\r\n  getWeekNumberISO8601,\r\n} from \"../../helpers/date-helper\";\r\nimport { DateSetup } from \"../../types/date-setup\";\r\nimport styles from \"./calendar.module.css\";\r\n\r\nexport type CalendarProps = {\r\n  dateSetup: DateSetup;\r\n  locale: string;\r\n  viewMode: ViewMode;\r\n  rtl: boolean;\r\n  headerHeight: number;\r\n  columnWidth: number;\r\n  fontFamily: string;\r\n  fontSize: string;\r\n};\r\n\r\nexport const Calendar: React.FC<CalendarProps> = ({\r\n  dateSetup,\r\n  locale,\r\n  viewMode,\r\n  rtl,\r\n  headerHeight,\r\n  columnWidth,\r\n  fontFamily,\r\n  fontSize,\r\n}) => {\r\n  const getCalendarValuesForYear = () => {\r\n    const topValues: ReactChild[] = [];\r\n    const bottomValues: ReactChild[] = [];\r\n    const topDefaultHeight = headerHeight * 0.5;\r\n    for (let i = 0; i < dateSetup.dates.length; i++) {\r\n      const date = dateSetup.dates[i];\r\n      const bottomValue = date.getFullYear();\r\n      bottomValues.push(\r\n        <text\r\n          key={date.getFullYear()}\r\n          y={headerHeight * 0.8}\r\n          x={columnWidth * i + columnWidth * 0.5}\r\n          className={styles.calendarBottomText}\r\n        >\r\n          {bottomValue}\r\n        </text>\r\n      );\r\n      if (\r\n        i === 0 ||\r\n        date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\r\n      ) {\r\n        const topValue = date.getFullYear().toString();\r\n        let xText: number;\r\n        if (rtl) {\r\n          xText = (6 + i + date.getFullYear() + 1) * columnWidth;\r\n        } else {\r\n          xText = (6 + i - date.getFullYear()) * columnWidth;\r\n        }\r\n        topValues.push(\r\n          <TopPartOfCalendar\r\n            key={topValue}\r\n            value={topValue}\r\n            x1Line={columnWidth * i}\r\n            y1Line={0}\r\n            y2Line={headerHeight}\r\n            xText={xText}\r\n            yText={topDefaultHeight * 0.9}\r\n          />\r\n        );\r\n      }\r\n    }\r\n    return [topValues, bottomValues];\r\n  };\r\n\r\n  const getCalendarValuesForMonth = () => {\r\n    const topValues: ReactChild[] = [];\r\n    const bottomValues: ReactChild[] = [];\r\n    const topDefaultHeight = headerHeight * 0.5;\r\n    for (let i = 0; i < dateSetup.dates.length; i++) {\r\n      const date = dateSetup.dates[i];\r\n      const bottomValue = getLocaleMonth(date, locale);\r\n      bottomValues.push(\r\n        <text\r\n          key={bottomValue + date.getFullYear()}\r\n          y={headerHeight * 0.8}\r\n          x={columnWidth * i + columnWidth * 0.5}\r\n          className={styles.calendarBottomText}\r\n        >\r\n          {bottomValue}\r\n        </text>\r\n      );\r\n      if (\r\n        i === 0 ||\r\n        date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()\r\n      ) {\r\n        const topValue = date.getFullYear().toString();\r\n        let xText: number;\r\n        if (rtl) {\r\n          xText = (6 + i + date.getMonth() + 1) * columnWidth;\r\n        } else {\r\n          xText = (6 + i - date.getMonth()) * columnWidth;\r\n        }\r\n        topValues.push(\r\n          <TopPartOfCalendar\r\n            key={topValue}\r\n            value={topValue}\r\n            x1Line={columnWidth * i}\r\n            y1Line={0}\r\n            y2Line={topDefaultHeight}\r\n            xText={xText}\r\n            yText={topDefaultHeight * 0.9}\r\n          />\r\n        );\r\n      }\r\n    }\r\n    return [topValues, bottomValues];\r\n  };\r\n\r\n  const getCalendarValuesForWeek = () => {\r\n    const topValues: ReactChild[] = [];\r\n    const bottomValues: ReactChild[] = [];\r\n    let weeksCount: number = 1;\r\n    const topDefaultHeight = headerHeight * 0.5;\r\n    const dates = dateSetup.dates;\r\n    for (let i = dates.length - 1; i >= 0; i--) {\r\n      const date = dates[i];\r\n      let topValue = \"\";\r\n      if (i === 0 || date.getMonth() !== dates[i - 1].getMonth()) {\r\n        // top\r\n        topValue = `${getLocaleMonth(date, locale)}, ${date.getFullYear()}`;\r\n      }\r\n      // bottom\r\n      const bottomValue = `W${getWeekNumberISO8601(date)}`;\r\n\r\n      bottomValues.push(\r\n        <text\r\n          key={date.getTime()}\r\n          y={headerHeight * 0.8}\r\n          x={columnWidth * (i + +rtl)}\r\n          className={styles.calendarBottomText}\r\n        >\r\n          {bottomValue}\r\n        </text>\r\n      );\r\n\r\n      if (topValue) {\r\n        // if last day is new month\r\n        if (i !== dates.length - 1) {\r\n          topValues.push(\r\n            <TopPartOfCalendar\r\n              key={topValue}\r\n              value={topValue}\r\n              x1Line={columnWidth * i + weeksCount * columnWidth}\r\n              y1Line={0}\r\n              y2Line={topDefaultHeight}\r\n              xText={columnWidth * i + columnWidth * weeksCount * 0.5}\r\n              yText={topDefaultHeight * 0.9}\r\n            />\r\n          );\r\n        }\r\n        weeksCount = 0;\r\n      }\r\n      weeksCount++;\r\n    }\r\n    return [topValues, bottomValues];\r\n  };\r\n\r\n  const getCalendarValuesForDay = () => {\r\n    const topValues: ReactChild[] = [];\r\n    const bottomValues: ReactChild[] = [];\r\n    const topDefaultHeight = headerHeight * 0.5;\r\n    const dates = dateSetup.dates;\r\n    for (let i = 0; i < dates.length; i++) {\r\n      const date = dates[i];\r\n      const bottomValue = `${getLocalDayOfWeek(date, locale, \"short\")}, ${date\r\n        .getDate()\r\n        .toString()}`;\r\n\r\n      bottomValues.push(\r\n        <text\r\n          key={date.getTime()}\r\n          y={headerHeight * 0.8}\r\n          x={columnWidth * i + columnWidth * 0.5}\r\n          className={styles.calendarBottomText}\r\n        >\r\n          {bottomValue}\r\n        </text>\r\n      );\r\n      if (\r\n        i + 1 !== dates.length &&\r\n        date.getMonth() !== dates[i + 1].getMonth()\r\n      ) {\r\n        const topValue = getLocaleMonth(date, locale);\r\n\r\n        topValues.push(\r\n          <TopPartOfCalendar\r\n            key={topValue + date.getFullYear()}\r\n            value={topValue}\r\n            x1Line={columnWidth * (i + 1)}\r\n            y1Line={0}\r\n            y2Line={topDefaultHeight}\r\n            xText={\r\n              columnWidth * (i + 1) -\r\n              getDaysInMonth(date.getMonth(), date.getFullYear()) *\r\n                columnWidth *\r\n                0.5\r\n            }\r\n            yText={topDefaultHeight * 0.9}\r\n          />\r\n        );\r\n      }\r\n    }\r\n    return [topValues, bottomValues];\r\n  };\r\n\r\n  const getCalendarValuesForPartOfDay = () => {\r\n    const topValues: ReactChild[] = [];\r\n    const bottomValues: ReactChild[] = [];\r\n    const ticks = viewMode === ViewMode.HalfDay ? 2 : 4;\r\n    const topDefaultHeight = headerHeight * 0.5;\r\n    const dates = dateSetup.dates;\r\n    for (let i = 0; i < dates.length; i++) {\r\n      const date = dates[i];\r\n      const bottomValue = getCachedDateTimeFormat(locale, {\r\n        hour: \"numeric\",\r\n      }).format(date);\r\n\r\n      bottomValues.push(\r\n        <text\r\n          key={date.getTime()}\r\n          y={headerHeight * 0.8}\r\n          x={columnWidth * (i + +rtl)}\r\n          className={styles.calendarBottomText}\r\n          fontFamily={fontFamily}\r\n        >\r\n          {bottomValue}\r\n        </text>\r\n      );\r\n      if (i === 0 || date.getDate() !== dates[i - 1].getDate()) {\r\n        const topValue = `${getLocalDayOfWeek(\r\n          date,\r\n          locale,\r\n          \"short\"\r\n        )}, ${date.getDate()} ${getLocaleMonth(date, locale)}`;\r\n        topValues.push(\r\n          <TopPartOfCalendar\r\n            key={topValue + date.getFullYear()}\r\n            value={topValue}\r\n            x1Line={columnWidth * i + ticks * columnWidth}\r\n            y1Line={0}\r\n            y2Line={topDefaultHeight}\r\n            xText={columnWidth * i + ticks * columnWidth * 0.5}\r\n            yText={topDefaultHeight * 0.9}\r\n          />\r\n        );\r\n      }\r\n    }\r\n\r\n    return [topValues, bottomValues];\r\n  };\r\n\r\n  const getCalendarValuesForHour = () => {\r\n    const topValues: ReactChild[] = [];\r\n    const bottomValues: ReactChild[] = [];\r\n    const topDefaultHeight = headerHeight * 0.5;\r\n    const dates = dateSetup.dates;\r\n    for (let i = 0; i < dates.length; i++) {\r\n      const date = dates[i];\r\n      const bottomValue = getCachedDateTimeFormat(locale, {\r\n        hour: \"numeric\",\r\n      }).format(date);\r\n\r\n      bottomValues.push(\r\n        <text\r\n          key={date.getTime()}\r\n          y={headerHeight * 0.8}\r\n          x={columnWidth * (i + +rtl)}\r\n          className={styles.calendarBottomText}\r\n          fontFamily={fontFamily}\r\n        >\r\n          {bottomValue}\r\n        </text>\r\n      );\r\n      if (i !== 0 && date.getDate() !== dates[i - 1].getDate()) {\r\n        const displayDate = dates[i - 1];\r\n        const topValue = `${getLocalDayOfWeek(\r\n          displayDate,\r\n          locale,\r\n          \"long\"\r\n        )}, ${displayDate.getDate()} ${getLocaleMonth(displayDate, locale)}`;\r\n        const topPosition = (date.getHours() - 24) / 2;\r\n        topValues.push(\r\n          <TopPartOfCalendar\r\n            key={topValue + displayDate.getFullYear()}\r\n            value={topValue}\r\n            x1Line={columnWidth * i}\r\n            y1Line={0}\r\n            y2Line={topDefaultHeight}\r\n            xText={columnWidth * (i + topPosition)}\r\n            yText={topDefaultHeight * 0.9}\r\n          />\r\n        );\r\n      }\r\n    }\r\n\r\n    return [topValues, bottomValues];\r\n  };\r\n\r\n  let topValues: ReactChild[] = [];\r\n  let bottomValues: ReactChild[] = [];\r\n  switch (dateSetup.viewMode) {\r\n    case ViewMode.Year:\r\n      [topValues, bottomValues] = getCalendarValuesForYear();\r\n      break;\r\n    case ViewMode.Month:\r\n        [topValues, bottomValues] = getCalendarValuesForMonth();\r\n        break;\r\n      case ViewMode.Week:\r\n      [topValues, bottomValues] = getCalendarValuesForWeek();\r\n      break;\r\n    case ViewMode.Day:\r\n      [topValues, bottomValues] = getCalendarValuesForDay();\r\n      break;\r\n    case ViewMode.QuarterDay:\r\n    case ViewMode.HalfDay:\r\n      [topValues, bottomValues] = getCalendarValuesForPartOfDay();\r\n      break;\r\n    case ViewMode.Hour:\r\n      [topValues, bottomValues] = getCalendarValuesForHour();\r\n  }\r\n  return (\r\n    <g className=\"calendar\" fontSize={fontSize} fontFamily={fontFamily}>\r\n      <rect\r\n        x={0}\r\n        y={0}\r\n        width={columnWidth * dateSetup.dates.length}\r\n        height={headerHeight}\r\n        className={styles.calendarHeader}\r\n      />\r\n      {bottomValues} {topValues}\r\n    </g>\r\n  );\r\n};\r\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import React from \"react\";\r\nimport { BarTask } from \"../../types/bar-task\";\r\n\r\ntype ArrowProps = {\r\n  taskFrom: BarTask;\r\n  taskTo: BarTask;\r\n  rowHeight: number;\r\n  taskHeight: number;\r\n  arrowIndent: number;\r\n  rtl: boolean;\r\n};\r\nexport const Arrow: React.FC<ArrowProps> = ({\r\n  taskFrom,\r\n  taskTo,\r\n  rowHeight,\r\n  taskHeight,\r\n  arrowIndent,\r\n  rtl,\r\n}) => {\r\n  let path: string;\r\n  let trianglePoints: string;\r\n  if (rtl) {\r\n    [path, trianglePoints] = drownPathAndTriangleRTL(\r\n      taskFrom,\r\n      taskTo,\r\n      rowHeight,\r\n      taskHeight,\r\n      arrowIndent\r\n    );\r\n  } else {\r\n    [path, trianglePoints] = drownPathAndTriangle(\r\n      taskFrom,\r\n      taskTo,\r\n      rowHeight,\r\n      taskHeight,\r\n      arrowIndent\r\n    );\r\n  }\r\n\r\n  return (\r\n    <g className=\"arrow\">\r\n      <path strokeWidth=\"1.5\" d={path} fill=\"none\" />\r\n      <polygon points={trianglePoints} />\r\n    </g>\r\n  );\r\n};\r\n\r\nconst drownPathAndTriangle = (\r\n  taskFrom: BarTask,\r\n  taskTo: BarTask,\r\n  rowHeight: number,\r\n  taskHeight: number,\r\n  arrowIndent: number\r\n) => {\r\n  const indexCompare = taskFrom.index > taskTo.index ? -1 : 1;\r\n  const taskToEndPosition = taskTo.y + taskHeight / 2;\r\n  const taskFromEndPosition = taskFrom.x2 + arrowIndent * 2;\r\n  const taskFromHorizontalOffsetValue =\r\n    taskFromEndPosition < taskTo.x1 ? \"\" : `H ${taskTo.x1 - arrowIndent}`;\r\n  const taskToHorizontalOffsetValue =\r\n    taskFromEndPosition > taskTo.x1\r\n      ? arrowIndent\r\n      : taskTo.x1 - taskFrom.x2 - arrowIndent;\r\n\r\n  const path = `M ${taskFrom.x2} ${taskFrom.y + taskHeight / 2} \r\n  h ${arrowIndent} \r\n  v ${(indexCompare * rowHeight) / 2} \r\n  ${taskFromHorizontalOffsetValue}\r\n  V ${taskToEndPosition} \r\n  h ${taskToHorizontalOffsetValue}`;\r\n\r\n  const trianglePoints = `${taskTo.x1},${taskToEndPosition} \r\n  ${taskTo.x1 - 5},${taskToEndPosition - 5} \r\n  ${taskTo.x1 - 5},${taskToEndPosition + 5}`;\r\n  return [path, trianglePoints];\r\n};\r\n\r\nconst drownPathAndTriangleRTL = (\r\n  taskFrom: BarTask,\r\n  taskTo: BarTask,\r\n  rowHeight: number,\r\n  taskHeight: number,\r\n  arrowIndent: number\r\n) => {\r\n  const indexCompare = taskFrom.index > taskTo.index ? -1 : 1;\r\n  const taskToEndPosition = taskTo.y + taskHeight / 2;\r\n  const taskFromEndPosition = taskFrom.x1 - arrowIndent * 2;\r\n  const taskFromHorizontalOffsetValue =\r\n    taskFromEndPosition > taskTo.x2 ? \"\" : `H ${taskTo.x2 + arrowIndent}`;\r\n  const taskToHorizontalOffsetValue =\r\n    taskFromEndPosition < taskTo.x2\r\n      ? -arrowIndent\r\n      : taskTo.x2 - taskFrom.x1 + arrowIndent;\r\n\r\n  const path = `M ${taskFrom.x1} ${taskFrom.y + taskHeight / 2} \r\n  h ${-arrowIndent} \r\n  v ${(indexCompare * rowHeight) / 2} \r\n  ${taskFromHorizontalOffsetValue}\r\n  V ${taskToEndPosition} \r\n  h ${taskToHorizontalOffsetValue}`;\r\n\r\n  const trianglePoints = `${taskTo.x2},${taskToEndPosition} \r\n  ${taskTo.x2 + 5},${taskToEndPosition + 5} \r\n  ${taskTo.x2 + 5},${taskToEndPosition - 5}`;\r\n  return [path, trianglePoints];\r\n};\r\n","import { Task } from \"../types/public-types\";\r\nimport { BarTask, TaskTypeInternal } from \"../types/bar-task\";\r\nimport { BarMoveAction } from \"../types/gantt-task-actions\";\r\n\r\nexport const convertToBarTasks = (\r\n  tasks: Task[],\r\n  dates: Date[],\r\n  columnWidth: number,\r\n  rowHeight: number,\r\n  taskHeight: number,\r\n  barCornerRadius: number,\r\n  handleWidth: number,\r\n  rtl: boolean,\r\n  barProgressColor: string,\r\n  barProgressSelectedColor: string,\r\n  barBackgroundColor: string,\r\n  barBackgroundSelectedColor: string,\r\n  projectProgressColor: string,\r\n  projectProgressSelectedColor: string,\r\n  projectBackgroundColor: string,\r\n  projectBackgroundSelectedColor: string,\r\n  milestoneBackgroundColor: string,\r\n  milestoneBackgroundSelectedColor: string\r\n) => {\r\n  let barTasks = tasks.map((t, i) => {\r\n    return convertToBarTask(\r\n      t,\r\n      i,\r\n      dates,\r\n      columnWidth,\r\n      rowHeight,\r\n      taskHeight,\r\n      barCornerRadius,\r\n      handleWidth,\r\n      rtl,\r\n      barProgressColor,\r\n      barProgressSelectedColor,\r\n      barBackgroundColor,\r\n      barBackgroundSelectedColor,\r\n      projectProgressColor,\r\n      projectProgressSelectedColor,\r\n      projectBackgroundColor,\r\n      projectBackgroundSelectedColor,\r\n      milestoneBackgroundColor,\r\n      milestoneBackgroundSelectedColor\r\n    );\r\n  });\r\n\r\n  // set dependencies\r\n  barTasks = barTasks.map(task => {\r\n    const dependencies = task.dependencies || [];\r\n    for (let j = 0; j < dependencies.length; j++) {\r\n      const dependence = barTasks.findIndex(\r\n        value => value.id === dependencies[j]\r\n      );\r\n      if (dependence !== -1) barTasks[dependence].barChildren.push(task);\r\n    }\r\n    return task;\r\n  });\r\n\r\n  return barTasks;\r\n};\r\n\r\nconst convertToBarTask = (\r\n  task: Task,\r\n  index: number,\r\n  dates: Date[],\r\n  columnWidth: number,\r\n  rowHeight: number,\r\n  taskHeight: number,\r\n  barCornerRadius: number,\r\n  handleWidth: number,\r\n  rtl: boolean,\r\n  barProgressColor: string,\r\n  barProgressSelectedColor: string,\r\n  barBackgroundColor: string,\r\n  barBackgroundSelectedColor: string,\r\n  projectProgressColor: string,\r\n  projectProgressSelectedColor: string,\r\n  projectBackgroundColor: string,\r\n  projectBackgroundSelectedColor: string,\r\n  milestoneBackgroundColor: string,\r\n  milestoneBackgroundSelectedColor: string\r\n): BarTask => {\r\n  let barTask: BarTask;\r\n  switch (task.type) {\r\n    case \"milestone\":\r\n      barTask = convertToMilestone(\r\n        task,\r\n        index,\r\n        dates,\r\n        columnWidth,\r\n        rowHeight,\r\n        taskHeight,\r\n        barCornerRadius,\r\n        handleWidth,\r\n        milestoneBackgroundColor,\r\n        milestoneBackgroundSelectedColor\r\n      );\r\n      break;\r\n    case \"project\":\r\n      barTask = convertToBar(\r\n        task,\r\n        index,\r\n        dates,\r\n        columnWidth,\r\n        rowHeight,\r\n        taskHeight,\r\n        barCornerRadius,\r\n        handleWidth,\r\n        rtl,\r\n        projectProgressColor,\r\n        projectProgressSelectedColor,\r\n        projectBackgroundColor,\r\n        projectBackgroundSelectedColor\r\n      );\r\n      break;\r\n    default:\r\n      barTask = convertToBar(\r\n        task,\r\n        index,\r\n        dates,\r\n        columnWidth,\r\n        rowHeight,\r\n        taskHeight,\r\n        barCornerRadius,\r\n        handleWidth,\r\n        rtl,\r\n        barProgressColor,\r\n        barProgressSelectedColor,\r\n        barBackgroundColor,\r\n        barBackgroundSelectedColor\r\n      );\r\n      break;\r\n  }\r\n  return barTask;\r\n};\r\n\r\nconst convertToBar = (\r\n  task: Task,\r\n  index: number,\r\n  dates: Date[],\r\n  columnWidth: number,\r\n  rowHeight: number,\r\n  taskHeight: number,\r\n  barCornerRadius: number,\r\n  handleWidth: number,\r\n  rtl: boolean,\r\n  barProgressColor: string,\r\n  barProgressSelectedColor: string,\r\n  barBackgroundColor: string,\r\n  barBackgroundSelectedColor: string\r\n): BarTask => {\r\n  let x1: number;\r\n  let x2: number;\r\n  if (rtl) {\r\n    x2 = taskXCoordinateRTL(task.start, dates, columnWidth);\r\n    x1 = taskXCoordinateRTL(task.end, dates, columnWidth);\r\n  } else {\r\n    x1 = taskXCoordinate(task.start, dates, columnWidth);\r\n    x2 = taskXCoordinate(task.end, dates, columnWidth);\r\n  }\r\n  let typeInternal: TaskTypeInternal = task.type;\r\n\r\n  const minWidth = 2;\r\n  if ((typeInternal === \"task\" || typeInternal === \"project\") && x2 - x1 < minWidth) {\r\n    typeInternal = \"smalltask\";\r\n    x2 = x1 + minWidth;\r\n  }\r\n\r\n  const [progressWidth, progressX] = progressWithByParams(\r\n    x1,\r\n    x2,\r\n    task.progress,\r\n    rtl\r\n  );\r\n  const y = taskYCoordinate(index, rowHeight, taskHeight);\r\n  const hideChildren = task.type === \"project\" ? task.hideChildren : undefined;\r\n\r\n  const styles = {\r\n    backgroundColor: barBackgroundColor,\r\n    backgroundSelectedColor: barBackgroundSelectedColor,\r\n    progressColor: barProgressColor,\r\n    progressSelectedColor: barProgressSelectedColor,\r\n    ...task.styles,\r\n  };\r\n  return {\r\n    ...task,\r\n    typeInternal,\r\n    x1,\r\n    x2,\r\n    y,\r\n    index,\r\n    progressX,\r\n    progressWidth,\r\n    barCornerRadius,\r\n    handleWidth,\r\n    hideChildren,\r\n    height: taskHeight,\r\n    barChildren: [],\r\n    styles,\r\n  };\r\n};\r\n\r\nconst convertToMilestone = (\r\n  task: Task,\r\n  index: number,\r\n  dates: Date[],\r\n  columnWidth: number,\r\n  rowHeight: number,\r\n  taskHeight: number,\r\n  barCornerRadius: number,\r\n  handleWidth: number,\r\n  milestoneBackgroundColor: string,\r\n  milestoneBackgroundSelectedColor: string\r\n): BarTask => {\r\n  const x = taskXCoordinate(task.start, dates, columnWidth);\r\n  const y = taskYCoordinate(index, rowHeight, taskHeight);\r\n\r\n  const x1 = x - taskHeight * 0.5;\r\n  const x2 = x + taskHeight * 0.5;\r\n\r\n  const rotatedHeight = taskHeight / 1.414;\r\n  const styles = {\r\n    backgroundColor: milestoneBackgroundColor,\r\n    backgroundSelectedColor: milestoneBackgroundSelectedColor,\r\n    progressColor: \"\",\r\n    progressSelectedColor: \"\",\r\n    ...task.styles,\r\n  };\r\n  return {\r\n    ...task,\r\n    end: task.start,\r\n    x1,\r\n    x2,\r\n    y,\r\n    index,\r\n    progressX: 0,\r\n    progressWidth: 0,\r\n    barCornerRadius,\r\n    handleWidth,\r\n    typeInternal: task.type,\r\n    progress: 0,\r\n    height: rotatedHeight,\r\n    hideChildren: undefined,\r\n    barChildren: [],\r\n    styles,\r\n  };\r\n};\r\n\r\nconst taskXCoordinate = (xDate: Date, dates: Date[], columnWidth: number) => {\r\n  let index = dates.findIndex(d => d.getTime() >= xDate.getTime()) - 1;\r\n  if (index < 0) {\r\n    index = 0;\r\n  }\r\n\r\n  const remainderMillis = xDate.getTime() - dates[index].getTime();\r\n  const percentOfInterval =\r\n    remainderMillis / (dates[index + 1].getTime() - dates[index].getTime());\r\n  const x = index * columnWidth + percentOfInterval * columnWidth;\r\n  return x;\r\n};\r\nconst taskXCoordinateRTL = (\r\n  xDate: Date,\r\n  dates: Date[],\r\n  columnWidth: number\r\n) => {\r\n  let x = taskXCoordinate(xDate, dates, columnWidth);\r\n  x += columnWidth;\r\n  return x;\r\n};\r\nconst taskYCoordinate = (\r\n  index: number,\r\n  rowHeight: number,\r\n  taskHeight: number\r\n) => {\r\n  const y = index * rowHeight + (rowHeight - taskHeight) / 2;\r\n  return y;\r\n};\r\n\r\nexport const progressWithByParams = (\r\n  taskX1: number,\r\n  taskX2: number,\r\n  progress: number,\r\n  rtl: boolean\r\n) => {\r\n  const progressWidth = (taskX2 - taskX1) * progress * 0.01;\r\n  let progressX: number;\r\n  if (rtl) {\r\n    progressX = taskX2 - progressWidth;\r\n  } else {\r\n    progressX = taskX1;\r\n  }\r\n  return [progressWidth, progressX];\r\n};\r\n\r\nexport const progressByProgressWidth = (\r\n  progressWidth: number,\r\n  barTask: BarTask\r\n) => {\r\n  const barWidth = barTask.x2 - barTask.x1;\r\n  const progressPercent = Math.round((progressWidth * 100) / barWidth);\r\n  if (progressPercent >= 100) return 100;\r\n  else if (progressPercent <= 0) return 0;\r\n  else return progressPercent;\r\n};\r\n\r\nconst progressByX = (x: number, task: BarTask) => {\r\n  if (x >= task.x2) return 100;\r\n  else if (x <= task.x1) return 0;\r\n  else {\r\n    const barWidth = task.x2 - task.x1;\r\n    const progressPercent = Math.round(((x - task.x1) * 100) / barWidth);\r\n    return progressPercent;\r\n  }\r\n};\r\nconst progressByXRTL = (x: number, task: BarTask) => {\r\n  if (x >= task.x2) return 0;\r\n  else if (x <= task.x1) return 100;\r\n  else {\r\n    const barWidth = task.x2 - task.x1;\r\n    const progressPercent = Math.round(((task.x2 - x) * 100) / barWidth);\r\n    return progressPercent;\r\n  }\r\n};\r\n\r\nexport const getProgressPoint = (\r\n  progressX: number,\r\n  taskY: number,\r\n  taskHeight: number\r\n) => {\r\n  const point = [\r\n    progressX - 5,\r\n    taskY + taskHeight,\r\n    progressX + 5,\r\n    taskY + taskHeight,\r\n    progressX,\r\n    taskY + taskHeight - 8.66,\r\n  ];\r\n  return point.join(\",\");\r\n};\r\n\r\nconst startByX = (x: number, xStep: number, task: BarTask) => {\r\n  if (x >= task.x2 - task.handleWidth * 2) {\r\n    x = task.x2 - task.handleWidth * 2;\r\n  }\r\n  const steps = Math.round((x - task.x1) / xStep);\r\n  const additionalXValue = steps * xStep;\r\n  const newX = task.x1 + additionalXValue;\r\n  return newX;\r\n};\r\n\r\nconst endByX = (x: number, xStep: number, task: BarTask) => {\r\n  if (x <= task.x1 + task.handleWidth * 2) {\r\n    x = task.x1 + task.handleWidth * 2;\r\n  }\r\n  const steps = Math.round((x - task.x2) / xStep);\r\n  const additionalXValue = steps * xStep;\r\n  const newX = task.x2 + additionalXValue;\r\n  return newX;\r\n};\r\n\r\nconst moveByX = (x: number, xStep: number, task: BarTask) => {\r\n  const steps = Math.round((x - task.x1) / xStep);\r\n  const additionalXValue = steps * xStep;\r\n  const newX1 = task.x1 + additionalXValue;\r\n  const newX2 = newX1 + task.x2 - task.x1;\r\n  return [newX1, newX2];\r\n};\r\n\r\nconst dateByX = (\r\n  x: number,\r\n  taskX: number,\r\n  taskDate: Date,\r\n  xStep: number,\r\n  timeStep: number\r\n) => {\r\n  let newDate = new Date(((x - taskX) / xStep) * timeStep + taskDate.getTime());\r\n  newDate = new Date(\r\n    newDate.getTime() +\r\n    (newDate.getTimezoneOffset() - taskDate.getTimezoneOffset()) * 60000\r\n  );\r\n  return newDate;\r\n};\r\n\r\n/**\r\n * Method handles event in real time(mousemove) and on finish(mouseup)\r\n */\r\nexport const handleTaskBySVGMouseEvent = (\r\n  svgX: number,\r\n  action: BarMoveAction,\r\n  selectedTask: BarTask,\r\n  xStep: number,\r\n  timeStep: number,\r\n  initEventX1Delta: number,\r\n  rtl: boolean\r\n): { isChanged: boolean; changedTask: BarTask } => {\r\n  let result: { isChanged: boolean; changedTask: BarTask };\r\n  switch (selectedTask.type) {\r\n    case \"milestone\":\r\n      result = handleTaskBySVGMouseEventForMilestone(\r\n        svgX,\r\n        action,\r\n        selectedTask,\r\n        xStep,\r\n        timeStep,\r\n        initEventX1Delta\r\n      );\r\n      break;\r\n    default:\r\n      result = handleTaskBySVGMouseEventForBar(\r\n        svgX,\r\n        action,\r\n        selectedTask,\r\n        xStep,\r\n        timeStep,\r\n        initEventX1Delta,\r\n        rtl\r\n      );\r\n      break;\r\n  }\r\n  return result;\r\n};\r\n\r\nconst handleTaskBySVGMouseEventForBar = (\r\n  svgX: number,\r\n  action: BarMoveAction,\r\n  selectedTask: BarTask,\r\n  xStep: number,\r\n  timeStep: number,\r\n  initEventX1Delta: number,\r\n  rtl: boolean\r\n): { isChanged: boolean; changedTask: BarTask } => {\r\n  const changedTask: BarTask = { ...selectedTask };\r\n  let isChanged = false;\r\n  switch (action) {\r\n    case \"progress\":\r\n      if (rtl) {\r\n        changedTask.progress = progressByXRTL(svgX, selectedTask);\r\n      } else {\r\n        changedTask.progress = progressByX(svgX, selectedTask);\r\n      }\r\n      isChanged = changedTask.progress !== selectedTask.progress;\r\n      if (isChanged) {\r\n        const [progressWidth, progressX] = progressWithByParams(\r\n          changedTask.x1,\r\n          changedTask.x2,\r\n          changedTask.progress,\r\n          rtl\r\n        );\r\n        changedTask.progressWidth = progressWidth;\r\n        changedTask.progressX = progressX;\r\n      }\r\n      break;\r\n    case \"start\": {\r\n      const newX1 = startByX(svgX, xStep, selectedTask);\r\n      changedTask.x1 = newX1;\r\n      isChanged = changedTask.x1 !== selectedTask.x1;\r\n      if (isChanged) {\r\n        if (rtl) {\r\n          changedTask.end = dateByX(\r\n            newX1,\r\n            selectedTask.x1,\r\n            selectedTask.end,\r\n            xStep,\r\n            timeStep\r\n          );\r\n        } else {\r\n          changedTask.start = dateByX(\r\n            newX1,\r\n            selectedTask.x1,\r\n            selectedTask.start,\r\n            xStep,\r\n            timeStep\r\n          );\r\n        }\r\n        const [progressWidth, progressX] = progressWithByParams(\r\n          changedTask.x1,\r\n          changedTask.x2,\r\n          changedTask.progress,\r\n          rtl\r\n        );\r\n        changedTask.progressWidth = progressWidth;\r\n        changedTask.progressX = progressX;\r\n      }\r\n      break;\r\n    }\r\n    case \"end\": {\r\n      const newX2 = endByX(svgX, xStep, selectedTask);\r\n      changedTask.x2 = newX2;\r\n      isChanged = changedTask.x2 !== selectedTask.x2;\r\n      if (isChanged) {\r\n        if (rtl) {\r\n          changedTask.start = dateByX(\r\n            newX2,\r\n            selectedTask.x2,\r\n            selectedTask.start,\r\n            xStep,\r\n            timeStep\r\n          );\r\n        } else {\r\n          changedTask.end = dateByX(\r\n            newX2,\r\n            selectedTask.x2,\r\n            selectedTask.end,\r\n            xStep,\r\n            timeStep\r\n          );\r\n        }\r\n        const [progressWidth, progressX] = progressWithByParams(\r\n          changedTask.x1,\r\n          changedTask.x2,\r\n          changedTask.progress,\r\n          rtl\r\n        );\r\n        changedTask.progressWidth = progressWidth;\r\n        changedTask.progressX = progressX;\r\n      }\r\n      break;\r\n    }\r\n    case \"move\": {\r\n      const [newMoveX1, newMoveX2] = moveByX(\r\n        svgX - initEventX1Delta,\r\n        xStep,\r\n        selectedTask\r\n      );\r\n      isChanged = newMoveX1 !== selectedTask.x1;\r\n      if (isChanged) {\r\n        changedTask.start = dateByX(\r\n          newMoveX1,\r\n          selectedTask.x1,\r\n          selectedTask.start,\r\n          xStep,\r\n          timeStep\r\n        );\r\n        changedTask.end = dateByX(\r\n          newMoveX2,\r\n          selectedTask.x2,\r\n          selectedTask.end,\r\n          xStep,\r\n          timeStep\r\n        );\r\n        changedTask.x1 = newMoveX1;\r\n        changedTask.x2 = newMoveX2;\r\n        const [progressWidth, progressX] = progressWithByParams(\r\n          changedTask.x1,\r\n          changedTask.x2,\r\n          changedTask.progress,\r\n          rtl\r\n        );\r\n        changedTask.progressWidth = progressWidth;\r\n        changedTask.progressX = progressX;\r\n      }\r\n      break;\r\n    }\r\n  }\r\n  return { isChanged, changedTask };\r\n};\r\n\r\nconst handleTaskBySVGMouseEventForMilestone = (\r\n  svgX: number,\r\n  action: BarMoveAction,\r\n  selectedTask: BarTask,\r\n  xStep: number,\r\n  timeStep: number,\r\n  initEventX1Delta: number\r\n): { isChanged: boolean; changedTask: BarTask } => {\r\n  const changedTask: BarTask = { ...selectedTask };\r\n  let isChanged = false;\r\n  switch (action) {\r\n    case \"move\": {\r\n      const [newMoveX1, newMoveX2] = moveByX(\r\n        svgX - initEventX1Delta,\r\n        xStep,\r\n        selectedTask\r\n      );\r\n      isChanged = newMoveX1 !== selectedTask.x1;\r\n      if (isChanged) {\r\n        changedTask.start = dateByX(\r\n          newMoveX1,\r\n          selectedTask.x1,\r\n          selectedTask.start,\r\n          xStep,\r\n          timeStep\r\n        );\r\n        changedTask.end = changedTask.start;\r\n        changedTask.x1 = newMoveX1;\r\n        changedTask.x2 = newMoveX2;\r\n      }\r\n      break;\r\n    }\r\n  }\r\n  return { isChanged, changedTask };\r\n};\r\n","import { BarTask } from \"../types/bar-task\";\r\nimport { Task } from \"../types/public-types\";\r\n\r\nexport function isKeyboardEvent(\r\n  event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent\r\n): event is React.KeyboardEvent {\r\n  return (event as React.KeyboardEvent).key !== undefined;\r\n}\r\n\r\nexport function isMouseEvent(\r\n  event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent\r\n): event is React.MouseEvent {\r\n  return (event as React.MouseEvent).clientX !== undefined;\r\n}\r\n\r\nexport function isBarTask(task: Task | BarTask): task is BarTask {\r\n  return (task as BarTask).x1 !== undefined;\r\n}\r\n\r\nexport function removeHiddenTasks(tasks: Task[]) {\r\n  const groupedTasks = tasks.filter(\r\n    t => t.hideChildren && t.type === \"project\"\r\n  );\r\n  if (groupedTasks.length > 0) {\r\n    for (let i = 0; groupedTasks.length > i; i++) {\r\n      const groupedTask = groupedTasks[i];\r\n      const children = getChildren(tasks, groupedTask);\r\n      tasks = tasks.filter(t => children.indexOf(t) === -1);\r\n    }\r\n  }\r\n  return tasks;\r\n}\r\n\r\nfunction getChildren(taskList: Task[], task: Task) {\r\n  let tasks: Task[] = [];\r\n  if (task.type !== \"project\") {\r\n    tasks = taskList.filter(\r\n      t => t.dependencies && t.dependencies.indexOf(task.id) !== -1\r\n    );\r\n  } else {\r\n    tasks = taskList.filter(t => t.project && t.project === task.id);\r\n  }\r\n  var taskChildren: Task[] = [];\r\n  tasks.forEach(t => {\r\n    taskChildren.push(...getChildren(taskList, t));\r\n  })\r\n  tasks = tasks.concat(tasks, taskChildren);\r\n  return tasks;\r\n}\r\n\r\nexport const sortTasks = (taskA: Task, taskB: Task) => {\r\n  const orderA = taskA.displayOrder || Number.MAX_VALUE;\r\n  const orderB = taskB.displayOrder || Number.MAX_VALUE;\r\n  if (orderA > orderB) {\r\n    return 1;\r\n  } else if (orderA < orderB) {\r\n    return -1;\r\n  } else {\r\n    return 0;\r\n  }\r\n};\r\n","import React from \"react\";\r\n\r\ntype BarDisplayProps = {\r\n  x: number;\r\n  y: number;\r\n  width: number;\r\n  height: number;\r\n  isSelected: boolean;\r\n  /* progress start point */\r\n  progressX: number;\r\n  progressWidth: number;\r\n  barCornerRadius: number;\r\n  styles: {\r\n    backgroundColor: string;\r\n    backgroundSelectedColor: string;\r\n    icon?: string;\r\n  };\r\n  onMouseDown: (event: React.MouseEvent<SVGPolygonElement, MouseEvent>) => void;\r\n};\r\nexport const BarDisplay: React.FC<BarDisplayProps> = ({\r\n  x,\r\n  y,\r\n  width,\r\n  barCornerRadius,\r\n  height,\r\n  isSelected,\r\n  styles,\r\n  onMouseDown,\r\n}) => {\r\n  const getBarColor = () => {\r\n    return isSelected ? styles.backgroundSelectedColor : styles.backgroundColor;\r\n  };\r\n\r\n  return (\r\n    <g onMouseDown={onMouseDown}>\r\n      {styles.icon ?\r\n        <text\r\n          x={x + (width / 2)}\r\n          y={y + (height / 2)}\r\n          fontWeight=\"bold\"\r\n          fontSize=\"1.6em\"\r\n          dominantBaseline=\"middle\"\r\n          text-anchor=\"middle\"\r\n          fill={getBarColor()}>\r\n          {styles.icon}\r\n        </text> :\r\n        <rect\r\n          x={x}\r\n          width={width}\r\n          y={y}\r\n          height={height}\r\n          ry={barCornerRadius}\r\n          rx={barCornerRadius}\r\n          fill={getBarColor()}\r\n        />}\r\n\r\n    </g>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport styles from \"./bar.module.css\";\r\n\r\ntype BarDateHandleProps = {\r\n  x: number;\r\n  y: number;\r\n  width: number;\r\n  height: number;\r\n  barCornerRadius: number;\r\n  onMouseDown: (event: React.MouseEvent<SVGRectElement, MouseEvent>) => void;\r\n};\r\nexport const BarDateHandle: React.FC<BarDateHandleProps> = ({\r\n  x,\r\n  y,\r\n  width,\r\n  height,\r\n  barCornerRadius,\r\n  onMouseDown,\r\n}) => {\r\n  return (\r\n    <rect\r\n      x={x}\r\n      y={y}\r\n      width={width}\r\n      height={height}\r\n      className={styles.barHandle}\r\n      ry={barCornerRadius}\r\n      rx={barCornerRadius}\r\n      onMouseDown={onMouseDown}\r\n    />\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport styles from \"./bar.module.css\";\r\n\r\ntype BarProgressHandleProps = {\r\n  progressPoint: string;\r\n  onMouseDown: (event: React.MouseEvent<SVGPolygonElement, MouseEvent>) => void;\r\n};\r\nexport const BarProgressHandle: React.FC<BarProgressHandleProps> = ({\r\n  progressPoint,\r\n  onMouseDown,\r\n}) => {\r\n  return (\r\n    <polygon\r\n      className={styles.barHandle}\r\n      points={progressPoint}\r\n      onMouseDown={onMouseDown}\r\n    />\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\r\nimport { BarDisplay } from \"./bar-display\";\r\nimport { BarDateHandle } from \"./bar-date-handle\";\r\nimport { BarProgressHandle } from \"./bar-progress-handle\";\r\nimport { TaskItemProps } from \"../task-item\";\r\nimport styles from \"./bar.module.css\";\r\n\r\nexport const Bar: React.FC<TaskItemProps> = ({\r\n  task,\r\n  isProgressChangeable,\r\n  isDateChangeable,\r\n  rtl,\r\n  onEventStart,\r\n  isSelected,\r\n}) => {\r\n  const progressPoint = getProgressPoint(\r\n    +!rtl * task.progressWidth + task.progressX,\r\n    task.y,\r\n    task.height\r\n  );\r\n  const handleHeight = task.height - 2;\r\n  return (\r\n    <g className={styles.barWrapper} tabIndex={0}>\r\n      <BarDisplay\r\n        x={task.x1}\r\n        y={task.y}\r\n        width={task.x2 - task.x1}\r\n        height={task.height}\r\n        progressX={task.progressX}\r\n        progressWidth={task.progressWidth}\r\n        barCornerRadius={task.barCornerRadius}\r\n        styles={task.styles}\r\n        isSelected={isSelected}\r\n        onMouseDown={e => {\r\n          isDateChangeable && onEventStart(\"move\", task, e);\r\n        }}\r\n      />\r\n      <g className=\"handleGroup\">\r\n        {isDateChangeable && (\r\n          <g>\r\n            {/* left */}\r\n            <BarDateHandle\r\n              x={task.x1 + 1}\r\n              y={task.y + 1}\r\n              width={task.handleWidth}\r\n              height={handleHeight}\r\n              barCornerRadius={task.barCornerRadius}\r\n              onMouseDown={e => {\r\n                onEventStart(\"start\", task, e);\r\n              }}\r\n            />\r\n            {/* right */}\r\n            <BarDateHandle\r\n              x={task.x2 - task.handleWidth - 1}\r\n              y={task.y + 1}\r\n              width={task.handleWidth}\r\n              height={handleHeight}\r\n              barCornerRadius={task.barCornerRadius}\r\n              onMouseDown={e => {\r\n                onEventStart(\"end\", task, e);\r\n              }}\r\n            />\r\n          </g>\r\n        )}\r\n        {isProgressChangeable && (\r\n          <BarProgressHandle\r\n            progressPoint={progressPoint}\r\n            onMouseDown={e => {\r\n              onEventStart(\"progress\", task, e);\r\n            }}\r\n          />\r\n        )}\r\n      </g>\r\n    </g>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport { getProgressPoint } from \"../../../helpers/bar-helper\";\r\nimport { BarDisplay } from \"./bar-display\";\r\nimport { BarProgressHandle } from \"./bar-progress-handle\";\r\nimport { TaskItemProps } from \"../task-item\";\r\nimport styles from \"./bar.module.css\";\r\n\r\nexport const BarSmall: React.FC<TaskItemProps> = ({\r\n  task,\r\n  isProgressChangeable,\r\n  isDateChangeable,\r\n  onEventStart,\r\n  isSelected,\r\n}) => {\r\n  const progressPoint = getProgressPoint(\r\n    task.progressWidth + task.x1,\r\n    task.y,\r\n    task.height\r\n  );\r\n  return (\r\n    <g className={styles.barWrapper} tabIndex={0}>\r\n      <BarDisplay\r\n        x={task.x1}\r\n        y={task.y}\r\n        width={task.x2 - task.x1}\r\n        height={task.height}\r\n        progressX={task.progressX}\r\n        progressWidth={task.progressWidth}\r\n        barCornerRadius={task.barCornerRadius}\r\n        styles={task.styles}\r\n        isSelected={isSelected}\r\n        onMouseDown={e => {\r\n          isDateChangeable && onEventStart(\"move\", task, e);\r\n        }}\r\n      />\r\n      <g className=\"handleGroup\">\r\n        {isProgressChangeable && (\r\n          <BarProgressHandle\r\n            progressPoint={progressPoint}\r\n            onMouseDown={e => {\r\n              onEventStart(\"progress\", task, e);\r\n            }}\r\n          />\r\n        )}\r\n      </g>\r\n    </g>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport { TaskItemProps } from \"../task-item\";\r\nimport styles from \"./milestone.module.css\";\r\n\r\nexport const Milestone: React.FC<TaskItemProps> = ({\r\n  task,\r\n  isDateChangeable,\r\n  onEventStart,\r\n  isSelected,\r\n}) => {\r\n  const transform = `rotate(45 ${task.x1 + task.height * 0.356} \r\n    ${task.y + task.height * 0.85})`;\r\n  const getBarColor = () => {\r\n    return isSelected\r\n      ? task.styles.backgroundSelectedColor\r\n      : task.styles.backgroundColor;\r\n  };\r\n\r\n  return (\r\n    <g tabIndex={0} className={styles.milestoneWrapper}>\r\n      <rect\r\n        fill={getBarColor()}\r\n        x={task.x1}\r\n        width={task.height}\r\n        y={task.y}\r\n        height={task.height}\r\n        rx={task.barCornerRadius}\r\n        ry={task.barCornerRadius}\r\n        transform={transform}\r\n        className={styles.milestoneBackground}\r\n        onMouseDown={e => {\r\n          isDateChangeable && onEventStart(\"move\", task, e);\r\n        }}\r\n      />\r\n    </g>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport { TaskItemProps } from \"../task-item\";\r\nimport styles from \"./project.module.css\";\r\n\r\nexport const Project: React.FC<TaskItemProps> = ({ task, isSelected }) => {\r\n  const barColor = isSelected\r\n    ? task.styles.backgroundSelectedColor\r\n    : task.styles.backgroundColor;\r\n  const projectWith = task.x2 - task.x1;\r\n\r\n  return (\r\n    <g tabIndex={0} className={styles.projectWrapper}>\r\n      <rect\r\n        fill={barColor}\r\n        x={task.x1}\r\n        width={projectWith}\r\n        y={task.y}\r\n        height={task.height}\r\n        rx={task.barCornerRadius}\r\n        ry={task.barCornerRadius}\r\n        className={styles.projectBackground}\r\n      />      \r\n    </g>\r\n  );\r\n};\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { BarTask } from \"../../types/bar-task\";\r\nimport { GanttContentMoveAction } from \"../../types/gantt-task-actions\";\r\nimport { Bar } from \"./bar/bar\";\r\nimport { BarSmall } from \"./bar/bar-small\";\r\nimport { Milestone } from \"./milestone/milestone\";\r\nimport { Project } from \"./project/project\";\r\nimport style from \"./task-list.module.css\";\r\n\r\nexport type TaskItemProps = {\r\n  task: BarTask;\r\n  arrowIndent: number;\r\n  taskHeight: number;\r\n  isProgressChangeable: boolean;\r\n  isDateChangeable: boolean;\r\n  isDelete: boolean;\r\n  isSelected: boolean;\r\n  rtl: boolean;\r\n  onEventStart: (\r\n    action: GanttContentMoveAction,\r\n    selectedTask: BarTask,\r\n    event?: React.MouseEvent | React.KeyboardEvent\r\n  ) => any;\r\n};\r\n\r\nexport const TaskItem: React.FC<TaskItemProps> = props => {\r\n  const {\r\n    task,\r\n    arrowIndent,\r\n    isDelete,\r\n    taskHeight,\r\n    isSelected,\r\n    rtl,\r\n    onEventStart,\r\n  } = {\r\n    ...props,\r\n  };\r\n  const textRef = useRef<SVGTextElement>(null);\r\n  const [taskItem, setTaskItem] = useState<JSX.Element>(<div />);\r\n  const [isTextInside, setIsTextInside] = useState(true);\r\n\r\n  useEffect(() => {\r\n    switch (task.typeInternal) {\r\n      case \"milestone\":\r\n        setTaskItem(<Milestone {...props} />);\r\n        break;\r\n      case \"project\":\r\n        setTaskItem(<Project {...props} />);\r\n        break;\r\n      case \"smalltask\":\r\n        setTaskItem(<BarSmall {...props} />);\r\n        break;\r\n      default:\r\n        setTaskItem(<Bar {...props} />);\r\n        break;\r\n    }\r\n  }, [task, isSelected]);\r\n\r\n  useEffect(() => {\r\n    if (textRef.current) {\r\n      setIsTextInside(textRef.current.getBBox().width < task.x2 - task.x1);\r\n    }\r\n  }, [textRef, task]);\r\n\r\n  const getX = () => {\r\n    const width = task.x2 - task.x1;\r\n    const hasChild = task.barChildren.length > 0;\r\n    if (isTextInside) {\r\n      return task.x1 + width * 0.5;\r\n    }\r\n    if (rtl && textRef.current) {\r\n      return (\r\n        task.x1 -\r\n        textRef.current.getBBox().width -\r\n        arrowIndent * +hasChild -\r\n        arrowIndent * 0.2\r\n      );\r\n    } else {\r\n      return task.x1 + width + arrowIndent * +hasChild + arrowIndent * 0.2;\r\n    }\r\n  };\r\n\r\n  return (\r\n    <g data-tip data-for={task.id}\r\n      onKeyDown={e => {\r\n        switch (e.key) {\r\n          case \"Delete\": {\r\n            if (isDelete) onEventStart(\"delete\", task, e);\r\n            break;\r\n          }\r\n        }\r\n        e.stopPropagation();\r\n      }}\r\n      onMouseEnter={e => {\r\n        onEventStart(\"mouseenter\", task, e);\r\n      }}\r\n      onMouseLeave={e => {\r\n        onEventStart(\"mouseleave\", task, e);\r\n      }}\r\n      onDoubleClick={e => {\r\n        onEventStart(\"dblclick\", task, e);\r\n      }}\r\n      onClick={e => {\r\n        onEventStart(\"click\", task, e);\r\n      }}\r\n      onFocus={() => {\r\n        onEventStart(\"select\", task);\r\n      }}\r\n    >\r\n      {taskItem}\r\n      {task.type === \"project\" &&\r\n        <text\r\n          x={getX()}\r\n          y={task.y + taskHeight * 0.5}\r\n          className={\r\n            isTextInside\r\n              ? task.project ? style.barLabel : style.barLabel && style.barLabelTopProject\r\n              : style.barLabel && style.barLabelOutside\r\n          }\r\n          ref={textRef}\r\n        >\r\n          {task.name}\r\n        </text>}\r\n    </g>\r\n  );\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { EventOption } from \"../../types/public-types\";\r\nimport { BarTask } from \"../../types/bar-task\";\r\nimport { Arrow } from \"../other/arrow\";\r\nimport { handleTaskBySVGMouseEvent } from \"../../helpers/bar-helper\";\r\nimport { isKeyboardEvent } from \"../../helpers/other-helper\";\r\nimport { TaskItem } from \"../task-item/task-item\";\r\nimport {\r\n  BarMoveAction,\r\n  GanttContentMoveAction,\r\n  GanttEvent,\r\n} from \"../../types/gantt-task-actions\";\r\n\r\nexport type TaskGanttContentProps = {\r\n  tasks: BarTask[];\r\n  dates: Date[];\r\n  ganttEvent: GanttEvent;\r\n  selectedTask: BarTask | undefined;\r\n  rowHeight: number;\r\n  columnWidth: number;\r\n  timeStep: number;\r\n  svg?: React.RefObject<SVGSVGElement>;\r\n  svgWidth: number;\r\n  taskHeight: number;\r\n  arrowColor: string;\r\n  arrowIndent: number;\r\n  fontSize: string;\r\n  fontFamily: string;\r\n  rtl: boolean;\r\n  setGanttEvent: (value: GanttEvent) => void;\r\n  setFailedTask: (value: BarTask | null) => void;\r\n  setSelectedTask: (taskId: string) => void;\r\n} & EventOption;\r\n\r\nexport const TaskGanttContent: React.FC<TaskGanttContentProps> = ({\r\n  tasks,\r\n  dates,\r\n  ganttEvent,\r\n  selectedTask,\r\n  rowHeight,\r\n  columnWidth,\r\n  timeStep,\r\n  svg,\r\n  taskHeight,\r\n  arrowColor,\r\n  arrowIndent,\r\n  fontFamily,\r\n  fontSize,\r\n  rtl,\r\n  setGanttEvent,\r\n  setFailedTask,\r\n  setSelectedTask,\r\n  onDateChange,\r\n  onProgressChange,\r\n  onDoubleClick,\r\n  onClick,\r\n  onDelete,\r\n}) => {\r\n  const point = svg?.current?.createSVGPoint();\r\n  const [xStep, setXStep] = useState(0);\r\n  const [initEventX1Delta, setInitEventX1Delta] = useState(0);\r\n  const [isMoving, setIsMoving] = useState(false);\r\n\r\n  // create xStep\r\n  useEffect(() => {\r\n    const dateDelta =\r\n      dates[1].getTime() -\r\n      dates[0].getTime() -\r\n      dates[1].getTimezoneOffset() * 60 * 1000 +\r\n      dates[0].getTimezoneOffset() * 60 * 1000;\r\n    const newXStep = (timeStep * columnWidth) / dateDelta;\r\n    setXStep(newXStep);\r\n  }, [columnWidth, dates, timeStep]);\r\n\r\n  useEffect(() => {\r\n    const handleMouseMove = async (event: MouseEvent) => {\r\n      if (!ganttEvent.changedTask || !point || !svg?.current) return;\r\n      event.preventDefault();\r\n\r\n      point.x = event.clientX;\r\n      const cursor = point.matrixTransform(\r\n        svg?.current.getScreenCTM()?.inverse()\r\n      );\r\n\r\n      const { isChanged, changedTask } = handleTaskBySVGMouseEvent(\r\n        cursor.x,\r\n        ganttEvent.action as BarMoveAction,\r\n        ganttEvent.changedTask,\r\n        xStep,\r\n        timeStep,\r\n        initEventX1Delta,\r\n        rtl\r\n      );\r\n      if (isChanged) {\r\n        setGanttEvent({ action: ganttEvent.action, changedTask });\r\n      }\r\n    };\r\n\r\n    const handleMouseUp = async (event: MouseEvent) => {\r\n      const { action, originalSelectedTask, changedTask } = ganttEvent;\r\n      if (!changedTask || !point || !svg?.current || !originalSelectedTask)\r\n        return;\r\n      event.preventDefault();\r\n\r\n      point.x = event.clientX;\r\n      const cursor = point.matrixTransform(\r\n        svg?.current.getScreenCTM()?.inverse()\r\n      );\r\n      const { changedTask: newChangedTask } = handleTaskBySVGMouseEvent(\r\n        cursor.x,\r\n        action as BarMoveAction,\r\n        changedTask,\r\n        xStep,\r\n        timeStep,\r\n        initEventX1Delta,\r\n        rtl\r\n      );\r\n\r\n      const isNotLikeOriginal =\r\n        originalSelectedTask.start !== newChangedTask.start ||\r\n        originalSelectedTask.end !== newChangedTask.end ||\r\n        originalSelectedTask.progress !== newChangedTask.progress;\r\n\r\n      // remove listeners\r\n      svg.current.removeEventListener(\"mousemove\", handleMouseMove);\r\n      svg.current.removeEventListener(\"mouseup\", handleMouseUp);\r\n      setGanttEvent({ action: \"\" });\r\n      setIsMoving(false);\r\n\r\n      // custom operation start\r\n      let operationSuccess = true;\r\n      if (\r\n        (action === \"move\" || action === \"end\" || action === \"start\") &&\r\n        onDateChange &&\r\n        isNotLikeOriginal\r\n      ) {\r\n        try {\r\n          const result = await onDateChange(\r\n            newChangedTask,\r\n            newChangedTask.barChildren\r\n          );\r\n          if (result !== undefined) {\r\n            operationSuccess = result;\r\n          }\r\n        } catch (error) {\r\n          operationSuccess = false;\r\n        }\r\n      } else if (onProgressChange && isNotLikeOriginal) {\r\n        try {\r\n          const result = await onProgressChange(\r\n            newChangedTask,\r\n            newChangedTask.barChildren\r\n          );\r\n          if (result !== undefined) {\r\n            operationSuccess = result;\r\n          }\r\n        } catch (error) {\r\n          operationSuccess = false;\r\n        }\r\n      }\r\n\r\n      // If operation is failed - return old state\r\n      if (!operationSuccess) {\r\n        setFailedTask(originalSelectedTask);\r\n      }\r\n    };\r\n\r\n    if (\r\n      !isMoving &&\r\n      (ganttEvent.action === \"move\" ||\r\n        ganttEvent.action === \"end\" ||\r\n        ganttEvent.action === \"start\" ||\r\n        ganttEvent.action === \"progress\") &&\r\n      svg?.current\r\n    ) {\r\n      svg.current.addEventListener(\"mousemove\", handleMouseMove);\r\n      svg.current.addEventListener(\"mouseup\", handleMouseUp);\r\n      setIsMoving(true);\r\n    }\r\n  }, [\r\n    ganttEvent,\r\n    xStep,\r\n    initEventX1Delta,\r\n    onProgressChange,\r\n    timeStep,\r\n    onDateChange,\r\n    svg,\r\n    isMoving,\r\n    point,\r\n    rtl,\r\n    setFailedTask,\r\n    setGanttEvent,\r\n  ]);\r\n\r\n  /**\r\n   * Method is Start point of task change\r\n   */\r\n  const handleBarEventStart = async (\r\n    action: GanttContentMoveAction,\r\n    task: BarTask,\r\n    event?: React.MouseEvent | React.KeyboardEvent\r\n  ) => {\r\n    if (!event) {\r\n      if (action === \"select\") {\r\n        setSelectedTask(task.id);\r\n      }\r\n    }\r\n    // Keyboard events\r\n    else if (isKeyboardEvent(event)) {\r\n      if (action === \"delete\") {\r\n        if (onDelete) {\r\n          try {\r\n            const result = await onDelete(task);\r\n            if (result !== undefined && result) {\r\n              setGanttEvent({ action, changedTask: task });\r\n            }\r\n          } catch (error) {\r\n            console.error(\"Error on Delete. \" + error);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    // Mouse Events\r\n    else if (action === \"mouseenter\") {\r\n      if (!ganttEvent.action) {\r\n        setGanttEvent({\r\n          action,\r\n          changedTask: task,\r\n          originalSelectedTask: task,\r\n        });\r\n      }\r\n    } else if (action === \"mouseleave\") {\r\n      if (ganttEvent.action === \"mouseenter\") {\r\n        setGanttEvent({ action: \"\" });\r\n      }\r\n    } else if (action === \"dblclick\") {\r\n      !!onDoubleClick && onDoubleClick(task);\r\n    } else if (action === \"click\") {\r\n      !!onClick && onClick(task);\r\n    }\r\n    // Change task event start\r\n    else if (action === \"move\") {\r\n      if (!svg?.current || !point) return;\r\n      point.x = event.clientX;\r\n      const cursor = point.matrixTransform(\r\n        svg.current.getScreenCTM()?.inverse()\r\n      );\r\n      setInitEventX1Delta(cursor.x - task.x1);\r\n      setGanttEvent({\r\n        action,\r\n        changedTask: task,\r\n        originalSelectedTask: task,\r\n      });\r\n    } else {\r\n      setGanttEvent({\r\n        action,\r\n        changedTask: task,\r\n        originalSelectedTask: task,\r\n      });\r\n    }\r\n  };\r\n\r\n  const visibleTasks = tasks.filter(t => t.hideBarTask ? false : true);\r\n\r\n  return (\r\n    <g className=\"content\">\r\n      <g className=\"arrows\" fill={arrowColor} stroke={arrowColor}>\r\n        {visibleTasks.map(task => {\r\n          return task.barChildren.map(child => {\r\n            return (\r\n              <Arrow\r\n                key={`Arrow from ${task.id} to ${tasks[child.index].id}`}\r\n                taskFrom={task}\r\n                taskTo={tasks[child.index]}\r\n                rowHeight={rowHeight}\r\n                taskHeight={taskHeight}\r\n                arrowIndent={arrowIndent}\r\n                rtl={rtl}\r\n              />\r\n            );\r\n          });\r\n        })}\r\n      </g>\r\n      <g className=\"bar\" fontFamily={fontFamily} fontSize={fontSize}>\r\n        {visibleTasks.map(task => {\r\n          return (\r\n            <TaskItem\r\n              task={task}\r\n              arrowIndent={arrowIndent}\r\n              taskHeight={taskHeight}\r\n              isProgressChangeable={!!onProgressChange && !task.isDisabled}\r\n              isDateChangeable={!!onDateChange && !task.isDisabled}\r\n              isDelete={!task.isDisabled}\r\n              onEventStart={handleBarEventStart}\r\n              key={task.id}\r\n              isSelected={!!selectedTask && task.id === selectedTask.id}\r\n              rtl={rtl}\r\n            />\r\n          );\r\n        })}\r\n      </g>\r\n    </g>\r\n  );\r\n};\r\n","import React, { useEffect, useRef } from \"react\";\r\nimport { GridProps, Grid } from \"../grid/grid\";\r\nimport { CalendarProps, Calendar } from \"../calendar/calendar\";\r\nimport { TaskGanttContentProps, TaskGanttContent } from \"./task-gantt-content\";\r\nimport styles from \"./gantt.module.css\";\r\nimport ScrollContainer from \"react-indiana-drag-scroll\";\r\n\r\nexport type TaskGanttProps = {\r\n  gridProps: GridProps;\r\n  calendarProps: CalendarProps;\r\n  barProps: TaskGanttContentProps;\r\n  ganttHeight: number;\r\n};\r\nexport const TaskGantt: React.FC<TaskGanttProps> = ({\r\n  gridProps,\r\n  calendarProps,\r\n  barProps,\r\n  ganttHeight,\r\n}) => {\r\n  const ganttSVGRef = useRef<SVGSVGElement>(null);\r\n  const horizontalContainerRef = useRef<HTMLDivElement>(null);\r\n  const verticalGanttContainerRef = useRef<HTMLDivElement>(null);\r\n  const scrollContainerRef = useRef <HTMLElement>(null);\r\n  const newBarProps = { ...barProps, svg: ganttSVGRef };\r\n\r\n  useEffect(() => {\r\n    if (scrollContainerRef.current) {\r\n      const centeredTodayX = getCenteredTodayX();\r\n      if (centeredTodayX) {\r\n        scrollContainerRef.current.scrollTo(centeredTodayX, 0);\r\n      }\r\n    }\r\n  }, [gridProps.svgWidth]);  \r\n\r\n  return (\r\n    <div\r\n      id=\"task-gantt-vertical-container\"\r\n      className={styles.ganttVerticalContainer}\r\n      ref={verticalGanttContainerRef}\r\n      dir=\"ltr\"\r\n    >\r\n      <ScrollContainer hideScrollbars={false} innerRef={scrollContainerRef}>\r\n        <svg\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n          width={gridProps.svgWidth}\r\n          height={calendarProps.headerHeight}\r\n          fontFamily={barProps.fontFamily}\r\n        >\r\n          <Calendar {...calendarProps} />\r\n        </svg>\r\n        <div\r\n          ref={horizontalContainerRef}\r\n          className={styles.horizontalContainer}\r\n          style={\r\n            ganttHeight\r\n              ? { height: ganttHeight, width: gridProps.svgWidth }\r\n              : { width: gridProps.svgWidth }\r\n          }\r\n        >\r\n          <svg\r\n            xmlns=\"http://www.w3.org/2000/svg\"\r\n            width={gridProps.svgWidth}\r\n            height={barProps.rowHeight * barProps.tasks.length}\r\n            fontFamily={barProps.fontFamily}\r\n            ref={ganttSVGRef}\r\n          >\r\n            <Grid {...gridProps} />\r\n            <TaskGanttContent {...newBarProps} />\r\n          </svg>\r\n        </div>\r\n      </ScrollContainer>\r\n    </div>\r\n  );\r\n};\r\n\r\nfunction getCenteredTodayX() {\r\n  const todaySvgRect = document.querySelector(\".grid .gridBody .today rect\");\r\n  const todayX = todaySvgRect?.getAttribute(\"x\");\r\n  if (todayX) {\r\n    let centeredToday = +todayX;\r\n    const todayWidth = todaySvgRect?.getAttribute(\"width\");\r\n    if (todayWidth) {\r\n      centeredToday += +todayWidth / 2;\r\n    }\r\n    return centeredToday;\r\n  }\r\n  return undefined;\r\n}\r\n","import React, {\r\n  useState,\r\n  useRef,\r\n  useEffect,\r\n  useMemo,\r\n} from \"react\";\r\nimport { ViewMode, GanttProps, Task } from \"../../types/public-types\";\r\nimport { GridProps } from \"../grid/grid\";\r\nimport { ganttDateRange, seedDates } from \"../../helpers/date-helper\";\r\nimport { CalendarProps } from \"../calendar/calendar\";\r\nimport { TaskGanttContentProps } from \"./task-gantt-content\";\r\nimport { TaskListHeaderDefault } from \"../task-list/task-list-header\";\r\nimport { TaskListTableDefault } from \"../task-list/task-list-table\";\r\nimport { StandardTooltipContent, Tooltip } from \"../other/tooltip\";\r\nimport { TaskListProps, TaskList } from \"../task-list/task-list\";\r\nimport { TaskGantt } from \"./task-gantt\";\r\nimport { BarTask } from \"../../types/bar-task\";\r\nimport { convertToBarTasks } from \"../../helpers/bar-helper\";\r\nimport { GanttEvent } from \"../../types/gantt-task-actions\";\r\nimport { DateSetup } from \"../../types/date-setup\";\r\nimport { removeHiddenTasks, sortTasks } from \"../../helpers/other-helper\";\r\nimport styles from \"./gantt.module.css\";\r\n\r\nexport const Gantt: React.FunctionComponent<GanttProps> = ({\r\n  tasks,\r\n  headerHeight = 50,\r\n  columnWidth = 60,\r\n  listCellWidth = \"155px\",\r\n  rowHeight = 50,\r\n  ganttHeight = 0,\r\n  viewMode = ViewMode.Day,\r\n  preStepsCount = 1,\r\n  locale = \"en-GB\",\r\n  barFill = 60,\r\n  barCornerRadius = 3,\r\n  barProgressColor = \"#a3a3ff\",\r\n  barProgressSelectedColor = \"#8282f5\",\r\n  barBackgroundColor = \"#b8c2cc\",\r\n  barBackgroundSelectedColor = \"#aeb8c2\",\r\n  projectProgressColor = \"#7db59a\",\r\n  projectProgressSelectedColor = \"#59a985\",\r\n  projectBackgroundColor = \"#fac465\",\r\n  projectBackgroundSelectedColor = \"#f7bb53\",\r\n  milestoneBackgroundColor = \"#f1c453\",\r\n  milestoneBackgroundSelectedColor = \"#f29e4c\",\r\n  rtl = false,\r\n  handleWidth = 8,\r\n  timeStep = 300000,\r\n  arrowColor = \"grey\",\r\n  fontFamily = \"Arial, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue\",\r\n  fontSize = \"14px\",\r\n  arrowIndent = 20,\r\n  todayColor = \"rgba(252, 248, 227, 0.5)\",\r\n  viewDate,\r\n  TooltipContent = StandardTooltipContent,\r\n  TaskListHeader = TaskListHeaderDefault,\r\n  TaskListTable = TaskListTableDefault,\r\n  onDateChange,\r\n  onProgressChange,\r\n  onDoubleClick,\r\n  onClick,\r\n  onDelete,\r\n  onSelect,\r\n  onExpanderClick,\r\n}) => {\r\n  const wrapperRef = useRef<HTMLDivElement>(null);\r\n  const taskListRef = useRef<HTMLDivElement>(null);\r\n  const [dateSetup, setDateSetup] = useState<DateSetup>(() => {\r\n    const [startDate, endDate] = ganttDateRange(tasks, viewMode, preStepsCount);\r\n    return { viewMode, dates: seedDates(startDate, endDate, viewMode) };\r\n  });\r\n  const [currentViewDate, setCurrentViewDate] = useState<Date | undefined>(\r\n    undefined\r\n  );\r\n\r\n  const [barTasks, setBarTasks] = useState<BarTask[]>([]);\r\n  const [ganttEvent, setGanttEvent] = useState<GanttEvent>({\r\n    action: \"\",\r\n  });\r\n  const taskHeight = useMemo(\r\n    () => (rowHeight * barFill) / 100,\r\n    [rowHeight, barFill]\r\n  );\r\n\r\n  const [selectedTask, setSelectedTask] = useState<BarTask>();\r\n  const [failedTask, setFailedTask] = useState<BarTask | null>(null);\r\n\r\n  const svgWidth = dateSetup.dates.length * columnWidth;\r\n\r\n  // task change events\r\n  useEffect(() => {\r\n    let filteredTasks: Task[];\r\n    if (onExpanderClick) {\r\n      filteredTasks = removeHiddenTasks(tasks);\r\n    } else {\r\n      filteredTasks = tasks;\r\n    }\r\n    filteredTasks = filteredTasks.sort(sortTasks);\r\n    const [startDate, endDate] = ganttDateRange(\r\n      filteredTasks,\r\n      viewMode,\r\n      preStepsCount\r\n    );\r\n    let newDates = seedDates(startDate, endDate, viewMode);\r\n\r\n    setDateSetup({ dates: newDates, viewMode });\r\n    setBarTasks(\r\n      convertToBarTasks(\r\n        filteredTasks,\r\n        newDates,\r\n        columnWidth,\r\n        rowHeight,\r\n        taskHeight,\r\n        barCornerRadius,\r\n        handleWidth,\r\n        rtl,\r\n        barProgressColor,\r\n        barProgressSelectedColor,\r\n        barBackgroundColor,\r\n        barBackgroundSelectedColor,\r\n        projectProgressColor,\r\n        projectProgressSelectedColor,\r\n        projectBackgroundColor,\r\n        projectBackgroundSelectedColor,\r\n        milestoneBackgroundColor,\r\n        milestoneBackgroundSelectedColor\r\n      )\r\n    );\r\n  }, [\r\n    tasks,\r\n    viewMode,\r\n    preStepsCount,\r\n    rowHeight,\r\n    barCornerRadius,\r\n    columnWidth,\r\n    taskHeight,\r\n    handleWidth,\r\n    barProgressColor,\r\n    barProgressSelectedColor,\r\n    barBackgroundColor,\r\n    barBackgroundSelectedColor,\r\n    projectProgressColor,\r\n    projectProgressSelectedColor,\r\n    projectBackgroundColor,\r\n    projectBackgroundSelectedColor,\r\n    milestoneBackgroundColor,\r\n    milestoneBackgroundSelectedColor,\r\n    rtl,\r\n    onExpanderClick,\r\n  ]);\r\n\r\n  useEffect(() => {\r\n    if (\r\n      viewMode === dateSetup.viewMode &&\r\n      ((viewDate && !currentViewDate) ||\r\n        (viewDate && currentViewDate?.valueOf() !== viewDate.valueOf()))\r\n    ) {\r\n      const dates = dateSetup.dates;\r\n      const index = dates.findIndex(\r\n        (d, i) =>\r\n          viewDate.valueOf() >= d.valueOf() &&\r\n          i + 1 !== dates.length &&\r\n          viewDate.valueOf() < dates[i + 1].valueOf()\r\n      );\r\n      if (index === -1) {\r\n        return;\r\n      }\r\n      setCurrentViewDate(viewDate);\r\n    }\r\n  }, [\r\n    viewDate,\r\n    columnWidth,\r\n    dateSetup.dates,\r\n    dateSetup.viewMode,\r\n    viewMode,\r\n    currentViewDate,\r\n    setCurrentViewDate,\r\n  ]);\r\n\r\n  useEffect(() => {\r\n    const { changedTask, action } = ganttEvent;\r\n    if (changedTask) {\r\n      if (action === \"delete\") {\r\n        setGanttEvent({ action: \"\" });\r\n        setBarTasks(barTasks.filter(t => t.id !== changedTask.id));\r\n      } else if (\r\n        action === \"move\" ||\r\n        action === \"end\" ||\r\n        action === \"start\" ||\r\n        action === \"progress\"\r\n      ) {\r\n        const prevStateTask = barTasks.find(t => t.id === changedTask.id);\r\n        if (\r\n          prevStateTask &&\r\n          (prevStateTask.start.getTime() !== changedTask.start.getTime() ||\r\n            prevStateTask.end.getTime() !== changedTask.end.getTime() ||\r\n            prevStateTask.progress !== changedTask.progress)\r\n        ) {\r\n          // actions for change\r\n          const newTaskList = barTasks.map(t =>\r\n            t.id === changedTask.id ? changedTask : t\r\n          );\r\n          setBarTasks(newTaskList);\r\n        }\r\n      }\r\n    }\r\n  }, [ganttEvent, barTasks]);\r\n\r\n  useEffect(() => {\r\n    if (failedTask) {\r\n      setBarTasks(barTasks.map(t => (t.id !== failedTask.id ? t : failedTask)));\r\n      setFailedTask(null);\r\n    }\r\n  }, [failedTask, barTasks]);\r\n\r\n  /**\r\n  * Task select event\r\n  */\r\n  const handleSelectedTask = (taskId: string) => {\r\n    const newSelectedTask = barTasks.find(t => t.id === taskId);\r\n    const oldSelectedTask = barTasks.find(\r\n      t => !!selectedTask && t.id === selectedTask.id\r\n    );\r\n    if (onSelect) {\r\n      if (oldSelectedTask) {\r\n        onSelect(oldSelectedTask, false);\r\n      }\r\n      if (newSelectedTask) {\r\n        onSelect(newSelectedTask, true);\r\n      }\r\n    }\r\n    setSelectedTask(newSelectedTask);\r\n  };\r\n  const handleExpanderClick = (task: Task) => {\r\n    if (onExpanderClick && task.hideChildren !== undefined) {\r\n      onExpanderClick({ ...task, hideChildren: !task.hideChildren });\r\n    }\r\n  };\r\n\r\n  const handleScrollToSelectedTask = (taskId: string) => {\r\n    const selectedTask = barTasks.find(t => t.id === taskId);\r\n    if (selectedTask) {\r\n      const scrollContainer = document.querySelector(\"#task-gantt-vertical-container .indiana-scroll-container\");\r\n      const scrollX = selectedTask.x1 - 30;\r\n      scrollContainer?.scrollTo(scrollX < 0 ? 0 : scrollX, 0);\r\n    }\r\n  }\r\n\r\n  const gridProps: GridProps = {\r\n    columnWidth,\r\n    svgWidth,\r\n    tasks: tasks,\r\n    rowHeight,\r\n    dates: dateSetup.dates,\r\n    todayColor,\r\n    rtl,\r\n  };\r\n  const calendarProps: CalendarProps = {\r\n    dateSetup,\r\n    locale,\r\n    viewMode,\r\n    headerHeight,\r\n    columnWidth,\r\n    fontFamily,\r\n    fontSize,\r\n    rtl,\r\n  };\r\n  const barProps: TaskGanttContentProps = {\r\n    tasks: barTasks,\r\n    dates: dateSetup.dates,\r\n    ganttEvent,\r\n    selectedTask,\r\n    rowHeight,\r\n    taskHeight,\r\n    columnWidth,\r\n    arrowColor,\r\n    timeStep,\r\n    fontFamily,\r\n    fontSize,\r\n    arrowIndent,\r\n    svgWidth,\r\n    rtl,\r\n    setGanttEvent,\r\n    setFailedTask,\r\n    setSelectedTask: handleSelectedTask,\r\n    onDateChange,\r\n    onProgressChange,\r\n    onDoubleClick,\r\n    onClick,\r\n    onDelete,\r\n  };\r\n\r\n  const tableProps: TaskListProps = {\r\n    rowHeight,\r\n    rowWidth: listCellWidth,\r\n    fontFamily,\r\n    fontSize,\r\n    tasks: barTasks,\r\n    locale,\r\n    headerHeight,\r\n    ganttHeight,\r\n    horizontalContainerClass: styles.horizontalContainer,\r\n    selectedTask,\r\n    taskListRef,\r\n    setSelectedTask: handleSelectedTask,\r\n    onExpanderClick: handleExpanderClick,\r\n    scrollToSelectedTaskOnList: handleScrollToSelectedTask,\r\n    TaskListHeader,\r\n    TaskListTable,\r\n  };\r\n  return (\r\n    <div>\r\n      <div\r\n        className={styles.wrapper}\r\n        tabIndex={0}\r\n        ref={wrapperRef}\r\n      >\r\n        {listCellWidth && <TaskList {...tableProps} />}\r\n        <TaskGantt\r\n          gridProps={gridProps}\r\n          calendarProps={calendarProps}\r\n          barProps={barProps}\r\n          ganttHeight={ganttHeight}\r\n        />\r\n        {ganttEvent.changedTask && (\r\n          <Tooltip\r\n            fontFamily={fontFamily}\r\n            fontSize={fontSize}\r\n            task={ganttEvent.changedTask}\r\n            TooltipContent={TooltipContent}\r\n          />\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n"]}