@operato/gantt 2.0.0-beta.4 → 7.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/dist/src/gantt-chart-controller.d.ts +32 -0
  3. package/dist/src/gantt-chart-controller.js +395 -0
  4. package/dist/src/gantt-chart-controller.js.map +1 -0
  5. package/dist/src/locales.d.ts +52 -0
  6. package/dist/src/locales.js +79 -0
  7. package/dist/src/locales.js.map +1 -0
  8. package/dist/src/ox-gantt-chart.d.ts +11 -20
  9. package/dist/src/ox-gantt-chart.js +141 -435
  10. package/dist/src/ox-gantt-chart.js.map +1 -1
  11. package/dist/src/ox-gantt-resize-splitter.d.ts +2 -3
  12. package/dist/src/ox-gantt-resize-splitter.js +15 -22
  13. package/dist/src/ox-gantt-resize-splitter.js.map +1 -1
  14. package/dist/src/ox-gantt.d.ts +17 -3
  15. package/dist/src/ox-gantt.js +169 -29
  16. package/dist/src/ox-gantt.js.map +1 -1
  17. package/dist/src/ox-task-tooltip.d.ts +12 -0
  18. package/dist/src/ox-task-tooltip.js +132 -0
  19. package/dist/src/ox-task-tooltip.js.map +1 -0
  20. package/dist/src/types.d.ts +11 -4
  21. package/dist/src/types.js.map +1 -1
  22. package/dist/src/utils.d.ts +3 -3
  23. package/dist/src/utils.js.map +1 -1
  24. package/dist/stories/ox-gantt.stories.d.ts +19 -2
  25. package/dist/stories/ox-gantt.stories.js +104 -90
  26. package/dist/stories/ox-gantt.stories.js.map +1 -1
  27. package/dist/tsconfig.tsbuildinfo +1 -1
  28. package/package.json +7 -4
  29. package/src/gantt-chart-controller.ts +473 -0
  30. package/src/locales.ts +78 -0
  31. package/src/ox-gantt-chart.ts +151 -484
  32. package/src/ox-gantt-resize-splitter.ts +18 -25
  33. package/src/ox-gantt.ts +174 -31
  34. package/src/ox-task-tooltip.ts +120 -0
  35. package/src/types.ts +13 -5
  36. package/src/utils.ts +4 -4
  37. package/stories/ox-gantt.stories.ts +118 -91
  38. package/themes/grist-theme.css +5 -3
  39. package/translations/en.json +11 -1
  40. package/translations/ja.json +11 -1
  41. package/translations/ko.json +11 -1
  42. package/translations/ms.json +11 -1
  43. package/translations/zh.json +11 -1
  44. package/dist/src/locale.d.ts +0 -1
  45. package/dist/src/locale.js +0 -49
  46. package/dist/src/locale.js.map +0 -1
  47. package/src/locale.ts +0 -51
@@ -1 +1 @@
1
- {"version":3,"file":"ox-gantt-chart.js","sourceRoot":"","sources":["../../src/ox-gantt-chart.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAoC,MAAM,KAAK,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,MAAM,IAAI,iBAAiB,EAAE,MAAM,8CAA8C,CAAA;AAC1F,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAGxB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAO1C,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAArC;;QAyDL,aAAQ,GAAW,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,4BAA4B;QAGpH,WAAM,GAAW,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,sBAAsB;QAEzD,cAAS,GAAc,UAAU,CAAA;QACzB,oBAAe,GAAY,KAAK,CAAA;QAClE,UAAK,GAAW,EAAE,CAAA;QAEpC,cAAS,GAAW,EAAE,CAAA;QACtB,UAAK,GAAU,IAAI,CAAC,SAAS,CAAA;QAE9B,aAAQ,GAAS,IAAI,IAAI,CAAC,IAAI,CAAC,QAAS,CAAC,CAAA;QACzC,WAAM,GAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACpC,cAAS,GAAW,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IA8qBhG,CAAC;aApvBQ,WAAM,GAAG;QACd,iBAAiB;QACjB,eAAe;QACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiDF;KACF,AArDY,CAqDZ;IAwBS,YAAY,CAAC,kBAAqE;QAC1F,IAAI,CAAC,yBAAyB,EAAE,CAAA;IAClC,CAAC;IAED,OAAO,CAAC,iBAAuC;QAC7C,IAAI,cAAc,GAAG,KAAK,CAAA;QAE1B,IAAI,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACvC,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACnC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;YAEnF,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAA;YACzD,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QAED,cAAc,IAAI,IAAI,CAAC,MAAM,EAAE,CAAA;IACjC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;iCAIkB,CAAC,CAAc,EAAE,EAAE;YACxC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACvB,CAAC;mBACQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;;;;KAIlD,CAAA;IACH,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACnB,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,MAAM,CAAA;IACnC,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,CAAA;QACd,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,YAAY,EAAE,CAAC;YACtC,OAAO,EAAE,GAAG,CAAC,CAAA;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,EAAE,CAAC;YACxC,OAAO,EAAE,GAAG,CAAC,CAAA;QACf,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,aAAa;QACX,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA,CAAC,YAAY;IACzE,CAAC;IAED,IAAI,SAAS;QACX,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,aAAa;YACb,IAAI,CAAC,UAAU,GAAG,EAAE;iBACjB,SAAS,EAAE;iBACX,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;iBAC5E,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;QACrC,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,eAAe;QACb,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;IACjD,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED,QAAQ;QACN,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QAExC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;gBACrC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;oBACnC,IAAI;yBACD,MAAM,CAAC,MAAM,CAAC;yBACd,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;yBAClB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;yBAClB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;yBACb,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;yBACpE,IAAI,CAAC,QAAQ,EAAE,8DAA8D,CAAC;yBAC9E,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;gBAC5B,CAAC,CAAC,CAAA;YACJ,CAAC,CAAA;YAED,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC/G,YAAY,CAAC,QAAQ,CAAC,CAAA;YACxB,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ;qBAC1B,KAAK,CAAC,CAAC,CAAE;qBACT,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC9E,YAAY,CAAC,SAAS,CAAC,CAAA;YACzB,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,EAAE,CAAC,SAAS;qBAC5B,KAAK,CAAC,CAAC,CAAE;qBACT,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;gBAChF,YAAY,CAAC,UAAU,CAAC,CAAA;YAC1B,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;gBACzC,MAAM,YAAY,GAAG,EAAE,CAAC,SAAS;qBAC9B,KAAK,CAAC,CAAC,CAAE;qBACT,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;gBAChF,YAAY,CAAC,YAAY,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAA+D,EAAE,CAAA;QAEpF,gBAAgB;QAChB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAE,CAAC,CAAC,CAAA;YACxF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAE5G,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YAClE,MAAM,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,CAAA;YAE9B,gBAAgB;YAChB,MAAM,OAAO,GAAG,IAAI;iBACjB,MAAM,CAAC,MAAM,CAAC;iBACd,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;iBACjB,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;iBAChB,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;iBACxB,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;iBAClB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;iBAChD,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;iBACvB,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;YAE1B,uCAAuC;YACvC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,cAAc,EAAE;oBAClD,MAAM,EAAE,EAAE,IAAI,EAAE;oBAChB,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAA;gBACF,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;YACjC,CAAC,CAAC,CAAA;YAEF,eAAe;YACf,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAA;gBACvD,IAAI;qBACD,MAAM,CAAC,MAAM,CAAC;qBACd,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;qBACjB,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,uCAAuC;qBACrE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;qBAC5B,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,2CAA2C;qBAC/D,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;YAC/B,CAAC;YAED,uCAAuC;YACvC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;QAC3G,CAAC,CAAC,CAAA;QAEF,oBAAoB;QACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACxB,IAAI,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC1C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAEvC,wBAAwB;gBACxB,IAAI;qBACD,MAAM,CAAC,MAAM,CAAC;qBACd,IAAI,CACH,GAAG,EACH;eACG,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;eACxB,QAAQ,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC,CAAC;cAE9B,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK;oBAChD,CAAC,CAAC;iBACD,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC;iBAC5D,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC;aAChE;oBACG,CAAC,CAAC;mBACC,QAAQ,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;mBAChD,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;aAExE;eACG,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC;eAC9C,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC;WAC7C,CACA;qBACA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;qBACvB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;qBACpB,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,wDAAwD;IACxD,YAAY,CAAC,IAAe;QAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAA;QACd,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACtC,OAAO,MAAM,CAAA;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO,OAAO,CAAA;QAChB,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAED,QAAQ;QACN,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAExC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;QAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QAE1C,+BAA+B;QAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QAE1C,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,IAAY,EAAE,UAAoB,EAAE,EAAE;YACzF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;gBACnC,MAAM;qBACH,MAAM,CAAC,MAAM,CAAC;qBACd,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;qBAClB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;qBAClB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;qBAClB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;qBAChB,IAAI,CAAC,QAAQ,EAAE,8DAA8D,CAAC;qBAC9E,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAA;QACJ,CAAC,CAAA;QAED,MAAM,WAAW,GAAG,CAClB,SAAwD,EACxD,YAAsC,EACtC,EAAE;YACF,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAM,EAAE,EAAE;gBACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;gBACvF,OAAO,aAAa,iBAAiB,GAAG,CAAC,OAAO,CAAA;YAClD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAA;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9B,oBAAoB;YACpB,cAAc;YACd,MAAM,QAAQ,GAAG,EAAE;iBAChB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;iBACvB,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC3B,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAQ,CAAC;iBACzC,QAAQ,CAAC,CAAC,CAAC,CAAA;YACd,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ;iBAC1B,KAAK,CAAC,CAAC,CAAE;iBACT,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;YAC9E,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;YAE9B,MAAM,SAAS,GAAG,MAAM;iBACrB,MAAM,CAAC,GAAG,CAAC;iBACX,OAAO,CAAC,8CAA8C,EAAE,IAAI,CAAC;iBAC7D,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;iBACrC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAEjB,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAA;YAEnC,aAAa;YACb,MAAM,OAAO,GAAG,EAAE;iBACf,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;iBACvB,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC1B,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAQ,CAAC;iBACtC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAEd,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;YAC/G,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;YAE9B,MAAM,QAAQ,GAAG,MAAM;iBACpB,MAAM,CAAC,GAAG,CAAC;iBACX,OAAO,CAAC,6CAA6C,EAAE,IAAI,CAAC;iBAC5D,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;iBACrC,IAAI,CAAC,OAAO,CAAC,CAAA;YAEhB,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACzC,wBAAwB;YACxB,iBAAiB;YACjB,MAAM,WAAW,GAAG,EAAE;iBACnB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;iBACvB,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC5B,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAQ,CAAC;iBACzC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAEd,MAAM,YAAY,GAAG,EAAE,CAAC,SAAS;iBAC9B,KAAK,CAAC,CAAC,CAAE;iBACT,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;YAChF,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;YAEjC,MAAM,YAAY,GAAG,MAAM;iBACxB,MAAM,CAAC,GAAG,CAAC;iBACX,OAAO,CAAC,iDAAiD,EAAE,IAAI,CAAC;iBAChE,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;iBACrC,IAAI,CAAC,WAAW,CAAC,CAAA;YAEpB,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAQ,CAAC,CAAA;YAEvD,cAAc;YACd,MAAM,QAAQ,GAAG,EAAE;iBAChB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;iBACvB,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC3B,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAQ,CAAC;iBACzC,QAAQ,CAAC,CAAC,CAAC,CAAA;YACd,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ;iBAC1B,KAAK,CAAC,CAAC,CAAE;iBACT,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;YAC9E,YAAY,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;YAE/B,MAAM,SAAS,GAAG,MAAM;iBACrB,MAAM,CAAC,GAAG,CAAC;iBACX,OAAO,CAAC,8CAA8C,EAAE,IAAI,CAAC;iBAC7D,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;iBACrC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAEjB,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAA;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;YACvC,sBAAsB;YACtB,cAAc;YACd,MAAM,QAAQ,GAAG,EAAE;iBAChB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;iBACvB,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC3B,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAQ,CAAC;iBACtC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAEd,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ;iBAC1B,KAAK,CAAC,CAAC,CAAE;iBACT,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;YAC9E,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;YAE9B,MAAM,SAAS,GAAG,MAAM;iBACrB,MAAM,CAAC,GAAG,CAAC;iBACX,OAAO,CAAC,8CAA8C,EAAE,IAAI,CAAC;iBAC7D,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;iBACrC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAEjB,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAS,CAAC,CAAA;YAEpD,eAAe;YACf,MAAM,SAAS,GAAG,EAAE;iBACjB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;iBACvB,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC5B,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAQ,CAAC;iBACtC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAEd,MAAM,UAAU,GAAG,EAAE,CAAC,SAAS;iBAC5B,KAAK,CAAC,CAAC,CAAE;iBACT,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;YAChF,YAAY,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;YAEhC,MAAM,UAAU,GAAG,MAAM;iBACtB,MAAM,CAAC,GAAG,CAAC;iBACX,OAAO,CAAC,+CAA+C,EAAE,IAAI,CAAC;iBAC9D,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;iBACrC,IAAI,CAAC,SAAS,CAAC,CAAA;YAElB,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAQ,CAAC,CAAA;QACvD,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACzC,wBAAwB;YACxB,cAAc;YACd,MAAM,QAAQ,GAAG,EAAE;iBAChB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;iBACvB,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC3B,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAQ,CAAC;iBACtC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAEd,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ;iBAC1B,KAAK,CAAC,CAAC,CAAE;iBACT,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;YAC9E,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;YAE9B,MAAM,SAAS,GAAG,MAAM;iBACrB,MAAM,CAAC,GAAG,CAAC;iBACX,OAAO,CAAC,8CAA8C,EAAE,IAAI,CAAC;iBAC7D,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;iBACrC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAEjB,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAS,CAAC,CAAA;YAEpD,iBAAiB;YACjB,MAAM,WAAW,GAAG,EAAE;iBACnB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;iBACvB,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC5B,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAQ,CAAC;iBACzC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAEd,MAAM,YAAY,GAAG,EAAE,CAAC,SAAS;iBAC9B,KAAK,CAAC,CAAC,CAAE;iBACT,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;YAChF,YAAY,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;YAElC,MAAM,YAAY,GAAG,MAAM;iBACxB,MAAM,CAAC,GAAG,CAAC;iBACX,OAAO,CAAC,iDAAiD,EAAE,IAAI,CAAC;iBAChE,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;iBACrC,IAAI,CAAC,WAAW,CAAC,CAAA;YAEpB,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAQ,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IAED,yBAAyB;QACvB,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAExC,IAAI,UAAU,GAAG,KAAK,CAAA;QACtB,IAAI,MAAM,GAAkB,IAAI,CAAA;QAChC,IAAI,iBAAiB,GAAkB,IAAI,CAAA;QAE3C,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC7C,KAAK,CAAC,cAAc,EAAE,CAAA,CAAC,eAAe;YAEtC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,iBAAiB,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACrD,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,IAAI,CAAA;gBACjB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBAC9B,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAG,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAA;gBACpE,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAA;YAC3C,CAAC;QACH,CAAC,CAAA;QAED,MAAM,eAAe,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC5C,KAAK,CAAC,cAAc,EAAE,CAAA,CAAC,eAAe;YAEtC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBAC7D,MAAM,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBACvD,MAAM,UAAU,GAAG,eAAe,GAAG,iBAAiB,CAAA;gBACtD,IAAI,CAAC,SAAS,IAAI,UAAU,CAAA;gBAE5B,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;oBACxB,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,EAAE,CAAC;wBACjC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;oBACrB,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBAChC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;oBACrB,CAAC;gBACH,CAAC;qBAAM,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;oBAC/B,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC;wBAC7B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;oBACrB,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBAClC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;oBACrB,CAAC;gBACH,CAAC;gBAED,iBAAiB,GAAG,eAAe,CAAA;gBACnC,IAAI,CAAC,eAAe,EAAE,CAAA;gBACtB,IAAI,CAAC,MAAM,EAAE,CAAA;YACf,CAAC;iBAAM,IAAI,UAAU,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBAC9B,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAG,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAA;gBACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAA;gBACjD,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC,CAAA;QAED,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC3C,KAAK,CAAC,cAAc,EAAE,CAAA,CAAC,eAAe;YAEtC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,iBAAiB,GAAG,IAAI,CAAA;YAC1B,CAAC;YAED,IAAI,CAAC,UAAU,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACnC,YAAY;gBACZ,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;gBACrC,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAG,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAA;gBACpE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAA;gBAC/C,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;gBACtC,OAAM;YACR,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;YACrC,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAG,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAA;YACpE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAA;YAC7C,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAEpC,UAAU,GAAG,KAAK,CAAA;YAClB,MAAM,GAAG,IAAI,CAAA;QACf,CAAC,CAAA;QAED,MAAM,gBAAgB,GAAG,CAAC,OAAkB,EAAU,EAAE;YACtD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;YAClD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;YAClD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;QACrC,CAAC,CAAA;QAED,MAAM,eAAe,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC5C,UAAU,GAAG,IAAI,CAAA;YACjB,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAG,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAA;YACpE,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAA;QAC3C,CAAC,CAAA;QAED,MAAM,eAAe,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC5C,IAAI,CAAC,UAAU,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAM;YAE1C,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAG,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAA;YACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAA;YACjD,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC3C,CAAC,CAAA;QAED,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC1C,IAAI,CAAC,UAAU,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACnC,YAAY;gBACZ,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAG,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAA;gBACpE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAA;gBAC/C,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;gBACtC,OAAM;YACR,CAAC;YAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAG,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAA;YACpE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAA;YAC7C,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAEpC,UAAU,GAAG,KAAK,CAAA;YAClB,MAAM,GAAG,IAAI,CAAA;QACf,CAAC,CAAA;QAED,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;QACvC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;QACvC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QACnC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAA;QACzC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;QACvC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;IACvC,CAAC;IAED,kBAAkB,CAAC,MAAc,EAAE,IAAY;QAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEpC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEzC,IAAI,KAAK,EAAE,GAAG,CAAA;QAEd,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9B,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,CAAA;YACvD,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7E,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACzC,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,CAAA;YACxD,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9E,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;YACvC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,CAAA;YACzD,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC/E,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACzC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,CAAA;YACnE,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACzF,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAA;QAC5C,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAA;QAE1C,MAAM;aACH,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;aAC/B,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAM,CAAC,CAAC;aACjC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;aACb,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAM,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;aAC/F,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;aAClB,IAAI,CAAC,MAAM,EAAE,gEAAgE,CAAC;aAC9E,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAExB,IAAI;aACD,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;aAC/B,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAM,CAAC,CAAC;aACjC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACZ,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAM,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;aAC/F,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;aACtB,IAAI,CAAC,MAAM,EAAE,gEAAgE,CAAC;aAC9E,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,iBAAiB,CAAC,MAAc,EAAE,IAAY;QAC5C,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEpC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEzC,IAAI,KAAK,EAAE,GAAG,CAAA;QAEd,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9B,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,CAAA;YACvD,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7E,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACzC,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,CAAA;YACxD,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9E,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;YACvC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,CAAA;YACzD,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC/E,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACzC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,CAAA;YACnE,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACzF,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAA;QAC5C,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAA;QAE1C,MAAM;aACH,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;aAC/B,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAM,CAAC,CAAC;aACjC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;aACb,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAM,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;aAC/F,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;aAClB,IAAI,CAAC,MAAM,EAAE,gEAAgE,CAAC;aAC9E,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAExB,IAAI;aACD,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;aAC/B,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAM,CAAC,CAAC;aACjC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACZ,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAM,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;aAC/F,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;aACtB,IAAI,CAAC,MAAM,EAAE,gEAAgE,CAAC;aAC9E,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAExB,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC5C,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,qBAAqB,EAAE;YACzD,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,KAAM,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,GAAI,CAAC,EAAE;SAC7D,CAAC,CAAA;QAEF,MAAM,CAAC,IAAI,EAAE,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;IAC3C,CAAC;IAED,oBAAoB,CAAC,KAAiB;QACpC,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,KAAK,CAAC,eAAe,EAAE,CAAA;QAEvB,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACrE,SAAS;YACT,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;gBACtB,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;gBAClD,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,cAAc;YACd,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;YAC/C,IAAI,CAAC,SAAS,IAAI,UAAU,CAAA;YAE5B,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC;oBAC7B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;gBACrB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAClC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;gBACrB,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,EAAE,CAAC;oBACjC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;gBACrB,CAAC;YACH,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAChC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YACrB,CAAC;YAED,IAAI,CAAC,eAAe,EAAE,CAAA;YACtB,IAAI,CAAC,MAAM,EAAE,CAAA;QACf,CAAC;IACH,CAAC;;AA3rBD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;8CACoC;AAGvF;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;4CACsC;AAElC;IAApD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;+CAAkC;AACzB;IAA5D,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;qDAAiC;AAClE;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;2CAAmB;AAEpC;IAAR,KAAK,EAAE;+CAAuB;AACtB;IAAR,KAAK,EAAE;2CAA8B;AAOhB;IAArB,KAAK,CAAC,aAAa,CAAC;+CAAuB;AACxB;IAAnB,KAAK,CAAC,WAAW,CAAC;6CAAqB;AACZ;IAA3B,KAAK,CAAC,mBAAmB,CAAC;+CAA2B;AA5E3C,YAAY;IADxB,aAAa,CAAC,gBAAgB,CAAC;GACnB,YAAY,CAqvBxB","sourcesContent":["import { LitElement, html, css, PropertyValues, PropertyValueMap } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'\nimport * as d3 from 'd3'\n\nimport { LEVEL, TaskTag } from './types'\nimport { levelDown, levelUp } from './utils'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\nimport { Task } from './types.js'\n\ntype TimeScale = 'year-quarter' | 'year-month' | 'quarter-week' | 'week-day'\n\n@customElement('ox-gantt-chart')\nexport class OxGanttChart extends LitElement {\n static styles = [\n MDTypeScaleStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n\n overflow: hidden;\n }\n\n div[chart-container] {\n display: block;\n\n overflow-x: auto;\n overflow-y: clip;\n\n position: relative;\n }\n\n svg {\n min-width: 100%;\n }\n\n svg[header] {\n display: block;\n min-width: 100%;\n box-sizing: border-box;\n border-bottom: 1px solid var(--ox-gantt-border-color, var(--md-sys-color-on-surface));\n height: 40px;\n background-color: var(--ox-gantt-header-background-color, var(--md-sys-color-secondary-container));\n\n position: sticky;\n top: 0;\n z-index: 1;\n }\n\n .top-axis text,\n .bottom-axis text {\n font-size: 12px;\n }\n\n .grid line {\n stroke: #e0e0e0;\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n .no-select {\n user-select: none;\n }\n `\n ]\n\n @property({ type: String, attribute: 'from-date' })\n fromDate: string = new Date(new Date().getFullYear(), 0, 1).toISOString().split('T')[0] /* beginning of this year */\n\n @property({ type: String, attribute: 'to-date' })\n toDate: string = new Date(new Date().getFullYear(), 11, 31).toISOString().split('T')[0] /* end of this year */\n\n @property({ type: String, attribute: 'axis-scale' }) axisScale: TimeScale = 'week-day'\n @property({ type: Boolean, attribute: 'extend-grid-lines' }) extendGridLines: boolean = false\n @property({ type: Array }) tasks: Task[] = []\n\n @state() baseWidth: number = 30\n @state() level: LEVEL = this.axisScale\n\n private fromTime: Date = new Date(this.fromDate!)\n private toTime: Date = new Date(this.toDate)\n private totalDays: number = d3.timeDay.count(this.fromTime, d3.timeDay.offset(this.toTime, 1))\n private _timeScale!: d3.ScaleTime<number, number, never>\n\n @query('svg[header]') svgHeader!: SVGElement\n @query('svg[body]') svgBody!: SVGElement\n @query('[chart-container]') container!: HTMLDivElement\n\n protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {\n this.initHeaderGestureHandlers()\n }\n\n updated(changedProperties: PropertyValues<this>) {\n var redrawRequired = false\n\n if (changedProperties.has('fromDate') || changedProperties.has('toDate')) {\n this.fromTime = new Date(this.fromDate)\n this.toTime = new Date(this.toDate)\n this.totalDays = d3.timeDay.count(this.fromTime, d3.timeDay.offset(this.toTime, 1))\n\n redrawRequired = true\n }\n\n if (changedProperties.has('axisScale')) {\n redrawRequired = true\n }\n\n if (changedProperties.has('tasks')) {\n this.svgBody.style.height = this.tasks.length * 30 + 'px'\n redrawRequired = true\n }\n\n redrawRequired && this.redraw()\n }\n\n render() {\n return html`\n <div chart-container>\n <svg\n header\n @date-range-selected=${(e: CustomEvent) => {\n console.log(e.detail)\n }}\n @wheel=${this.handleWheelForHeader.bind(this)}\n ></svg>\n <svg body></svg>\n </div>\n `\n }\n\n setVerticalOffset(offset: number) {\n console.log(offset)\n this.container.scrollTop = offset\n }\n\n getScale() {\n if (this.level == 'quarter-week') {\n return 7 / 2\n } else if (this.level == 'year-month') {\n return 30 / 2\n } else if (this.level == 'year-quarter') {\n return 90 / 2\n }\n return 1\n }\n\n getChartWidth() {\n return (this.totalDays * this.baseWidth) / this.getScale() // 총 차트 폭 계산\n }\n\n get timeScale() {\n if (!this._timeScale) {\n // 시간축 스케일 생성\n this._timeScale = d3\n .scaleTime()\n .domain([d3.timeDay.floor(this.fromTime), d3.timeDay.offset(this.toTime, 1)])\n .range([0, this.getChartWidth()])\n }\n\n return this._timeScale\n }\n\n updateTimeScale() {\n this.timeScale.range([0, this.getChartWidth()])\n }\n\n redraw() {\n this.drawAxes()\n this.drawBody()\n }\n\n drawBody() {\n const body = d3.select(this.svgBody)\n\n body.selectAll('*').remove()\n body.attr('width', this.getChartWidth())\n\n if (this.extendGridLines) {\n const addGridLines = (ticks: Date[]) => {\n ticks.forEach(tick => {\n const startX = this.timeScale(tick)\n body\n .append('line')\n .attr('x1', startX)\n .attr('x2', startX)\n .attr('y1', 0)\n .attr('y2', Number(this.svgBody.getBoundingClientRect().height) || 0)\n .attr('stroke', 'var(--ox-gantt-color-gridlines, var(--md-sys-color-outline))')\n .attr('stroke-width', 1)\n })\n }\n\n if (this.level === 'week-day') {\n const dayTicks = d3.timeDay.every(1)!.range(d3.timeDay.floor(this.fromTime), d3.timeDay.offset(this.toTime, 1))\n addGridLines(dayTicks)\n } else if (this.level === 'quarter-week') {\n const weekTicks = d3.timeWeek\n .every(1)!\n .range(d3.timeWeek.floor(this.fromTime), d3.timeWeek.offset(this.toTime, 1))\n addGridLines(weekTicks)\n } else if (this.level === 'year-month') {\n const monthTicks = d3.timeMonth\n .every(1)!\n .range(d3.timeMonth.floor(this.fromTime), d3.timeMonth.offset(this.toTime, 1))\n addGridLines(monthTicks)\n } else if (this.level === 'year-quarter') {\n const quarterTicks = d3.timeMonth\n .every(3)!\n .range(d3.timeMonth.floor(this.fromTime), d3.timeMonth.offset(this.toTime, 3))\n addGridLines(quarterTicks)\n }\n }\n\n const taskPositions: { [key: string]: { x: number; y: number; width: number } } = {}\n\n // Add task bars\n this.tasks.forEach((task, index) => {\n const startX = this.timeScale(d3.timeDay.floor(d3.min([task.startTime, task.endTime])!))\n const endX = this.timeScale(d3.timeDay.offset(d3.timeDay.ceil(d3.max([task.startTime, task.endTime])!), -1))\n\n const taskWidth = endX - startX + this.baseWidth / this.getScale()\n const taskY = index * 30 + 7.5\n\n // Main task bar\n const taskBar = body\n .append('rect')\n .attr('x', startX)\n .attr('y', taskY)\n .attr('width', taskWidth)\n .attr('height', 15)\n .attr('fill', this.getTaskColor(task.tags || []))\n .attr('stroke', 'black')\n .attr('stroke-width', 1)\n\n // Add click event listener to task bar\n taskBar.on('click', () => {\n const customEvent = new CustomEvent('task-clicked', {\n detail: { task },\n bubbles: true,\n composed: true\n })\n this.dispatchEvent(customEvent)\n })\n\n // Progress bar\n if (task.progress !== undefined) {\n const progressWidth = taskWidth * (task.progress / 100)\n body\n .append('rect')\n .attr('x', startX)\n .attr('y', taskY + 7.5 - 3.75) // Adjust to center within the task bar\n .attr('width', progressWidth)\n .attr('height', 7.5) // Set height to 50% of the task bar height\n .attr('fill', 'lightgreen')\n }\n\n // Save task position for linking lines\n taskPositions[task.id] = { x: endX + this.baseWidth / this.getScale(), y: taskY + 7.5, width: taskWidth }\n })\n\n // Add linking lines\n this.tasks.forEach(task => {\n if (task.after && taskPositions[task.after]) {\n const prevTask = taskPositions[task.after]\n const currTask = taskPositions[task.id]\n\n // Draw the linking line\n body\n .append('path')\n .attr(\n 'd',\n `\n M${prevTask.x},${prevTask.y}\n L${prevTask.x + 10},${prevTask.y}\n ${\n prevTask.x + 10 < currTask.x - 10 - currTask.width\n ? `\n L${(prevTask.x + currTask.x - currTask.width) / 2},${prevTask.y}\n L${(prevTask.x + currTask.x - currTask.width) / 2},${currTask.y}\n `\n : `\n L${prevTask.x + 10},${(prevTask.y + currTask.y) / 2}\n L${currTask.x - 10 - currTask.width},${(prevTask.y + currTask.y) / 2}\n `\n }\n L${currTask.x - 10 - currTask.width},${currTask.y}\n L${currTask.x - currTask.width},${currTask.y}\n `\n )\n .attr('stroke', 'black')\n .attr('fill', 'none')\n .attr('stroke-width', 1)\n }\n })\n }\n\n // Helper function to determine task color based on tags\n getTaskColor(tags: TaskTag[]): string {\n if (tags.includes('critical')) {\n return 'red'\n } else if (tags.includes('milestone')) {\n return 'blue'\n } else if (tags.includes('done')) {\n return 'green'\n } else {\n return 'grey'\n }\n }\n\n drawAxes() {\n const header = d3.select(this.svgHeader)\n\n header.selectAll('*').remove()\n header.attr('width', this.getChartWidth())\n\n // 차트 컨테이너의 폭 설정 및 스크롤 가능하도록 설정\n header.attr('width', this.getChartWidth())\n\n const addGridLines = (ticks: Date[], yStart: number, yEnd: number, extendable?: boolean) => {\n ticks.forEach(tick => {\n const startX = this.timeScale(tick)\n header\n .append('line')\n .attr('x1', startX)\n .attr('x2', startX)\n .attr('y1', yStart)\n .attr('y2', yEnd)\n .attr('stroke', 'var(--ox-gantt-color-gridlines, var(--md-sys-color-outline))')\n .attr('stroke-width', 1)\n })\n }\n\n const centerLabel = (\n selection: d3.Selection<SVGGElement, unknown, null, any>,\n tickInterval: d3.CountableTimeInterval\n ) => {\n selection.selectAll('text').attr('transform', (d: any) => {\n const tickIntervalWidth = this.timeScale(tickInterval.offset(d, 1)) - this.timeScale(d)\n return `translate(${tickIntervalWidth / 2}, -2)`\n })\n }\n\n if (this.level === 'week-day') {\n // Level 1: week-day\n // Weekly axis\n const weekAxis = d3\n .axisTop(this.timeScale)\n .ticks(d3.timeWeek.every(1))\n .tickFormat(d3.timeFormat('%B %d') as any)\n .tickSize(0)\n const weekTicks = d3.timeWeek\n .every(1)!\n .range(d3.timeWeek.floor(this.fromTime), d3.timeWeek.offset(this.toTime, 1))\n addGridLines(weekTicks, 0, 20)\n\n const weekAxisG = header\n .append('g')\n .classed('week-axis no-select md-typescale-label-small', true)\n .attr('transform', `translate(0, 20)`)\n .call(weekAxis)\n\n centerLabel(weekAxisG, d3.timeWeek)\n\n // Daily axis\n const dayAxis = d3\n .axisTop(this.timeScale)\n .ticks(d3.timeDay.every(1))\n .tickFormat(d3.timeFormat('%d') as any)\n .tickSize(0)\n\n const dayTicks = d3.timeDay.every(1)!.range(d3.timeDay.floor(this.fromTime), d3.timeDay.offset(this.toTime, 1))\n addGridLines(dayTicks, 20, 40)\n\n const dayAxisG = header\n .append('g')\n .classed('day-axis no-select md-typescale-label-small', true)\n .attr('transform', `translate(0, 40)`)\n .call(dayAxis)\n\n centerLabel(dayAxisG, d3.timeDay)\n } else if (this.level === 'quarter-week') {\n // Level 2: quarter-week\n // Quarterly axis\n const quarterAxis = d3\n .axisTop(this.timeScale)\n .ticks(d3.timeMonth.every(3))\n .tickFormat(d3.timeFormat('%Y %b') as any)\n .tickSize(0)\n\n const quarterTicks = d3.timeMonth\n .every(3)!\n .range(d3.timeMonth.floor(this.fromTime), d3.timeMonth.offset(this.toTime, 3))\n addGridLines(quarterTicks, 0, 20)\n\n const quarterAxisG = header\n .append('g')\n .classed('quarter-axis no-select md-typescale-label-small', true)\n .attr('transform', `translate(0, 20)`)\n .call(quarterAxis)\n\n centerLabel(quarterAxisG, d3.timeMonth.every(3) as any)\n\n // Weekly axis\n const weekAxis = d3\n .axisTop(this.timeScale)\n .ticks(d3.timeWeek.every(1))\n .tickFormat(d3.timeFormat('%b %d') as any)\n .tickSize(0)\n const weekTicks = d3.timeWeek\n .every(1)!\n .range(d3.timeWeek.floor(this.fromTime), d3.timeWeek.offset(this.toTime, 1))\n addGridLines(weekTicks, 20, 40)\n\n const weekAxisG = header\n .append('g')\n .classed('week-axis no-select md-typescale-label-small', true)\n .attr('transform', `translate(0, 40)`)\n .call(weekAxis)\n\n centerLabel(weekAxisG, d3.timeWeek)\n } else if (this.level === 'year-month') {\n // Level 3: year-month\n // Yearly axis\n const yearAxis = d3\n .axisTop(this.timeScale)\n .ticks(d3.timeYear.every(1))\n .tickFormat(d3.timeFormat('%Y') as any)\n .tickSize(0)\n\n const yearTicks = d3.timeYear\n .every(1)!\n .range(d3.timeYear.floor(this.fromTime), d3.timeYear.offset(this.toTime, 1))\n addGridLines(yearTicks, 0, 20)\n\n const yearAxisG = header\n .append('g')\n .classed('year-axis no-select md-typescale-label-small', true)\n .attr('transform', `translate(0, 20)`)\n .call(yearAxis)\n\n centerLabel(yearAxisG, d3.timeYear.every(1)! as any)\n\n // Monthly axis\n const monthAxis = d3\n .axisTop(this.timeScale)\n .ticks(d3.timeMonth.every(1))\n .tickFormat(d3.timeFormat('%b') as any)\n .tickSize(0)\n\n const monthTicks = d3.timeMonth\n .every(1)!\n .range(d3.timeMonth.floor(this.fromTime), d3.timeMonth.offset(this.toTime, 1))\n addGridLines(monthTicks, 20, 40)\n\n const monthAxisG = header\n .append('g')\n .classed('month-axis no-select md-typescale-label-small', true)\n .attr('transform', `translate(0, 40)`)\n .call(monthAxis)\n\n centerLabel(monthAxisG, d3.timeMonth.every(1) as any)\n } else if (this.level === 'year-quarter') {\n // Level 4: year-quarter\n // Yearly axis\n const yearAxis = d3\n .axisTop(this.timeScale)\n .ticks(d3.timeYear.every(1))\n .tickFormat(d3.timeFormat('%Y') as any)\n .tickSize(0)\n\n const yearTicks = d3.timeYear\n .every(1)!\n .range(d3.timeYear.floor(this.fromTime), d3.timeYear.offset(this.toTime, 1))\n addGridLines(yearTicks, 0, 20)\n\n const yearAxisG = header\n .append('g')\n .classed('year-axis no-select md-typescale-label-small', true)\n .attr('transform', `translate(0, 20)`)\n .call(yearAxis)\n\n centerLabel(yearAxisG, d3.timeYear.every(1)! as any)\n\n // Quarterly axis\n const quarterAxis = d3\n .axisTop(this.timeScale)\n .ticks(d3.timeMonth.every(3))\n .tickFormat(d3.timeFormat('%Y %b') as any)\n .tickSize(0)\n\n const quarterTicks = d3.timeMonth\n .every(3)!\n .range(d3.timeMonth.floor(this.fromTime), d3.timeMonth.offset(this.toTime, 3))\n addGridLines(quarterTicks, 20, 40)\n\n const quarterAxisG = header\n .append('g')\n .classed('quarter-axis no-select md-typescale-label-small', true)\n .attr('transform', `translate(0, 40)`)\n .call(quarterAxis)\n\n centerLabel(quarterAxisG, d3.timeMonth.every(3) as any)\n }\n }\n\n initHeaderGestureHandlers() {\n const header = d3.select(this.svgHeader)\n\n let isDragging = false\n let startX: number | null = null\n let lastTouchDistance: number | null = null\n\n const handleTouchStart = (event: TouchEvent) => {\n event.preventDefault() // 기본 터치 이벤트 막기\n\n if (event.touches.length === 2) {\n lastTouchDistance = getTouchDistance(event.touches)\n } else {\n isDragging = true\n const touch = event.touches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n startX = touch.clientX - containerOffsetX\n }\n }\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault() // 기본 터치 이벤트 막기\n\n if (event.touches.length === 2 && lastTouchDistance !== null) {\n const currentDistance = getTouchDistance(event.touches)\n const zoomFactor = currentDistance / lastTouchDistance\n this.baseWidth *= zoomFactor\n\n if (this.baseWidth > 60) {\n if (this.level == 'year-quarter') {\n this.baseWidth = 60\n } else {\n this.level = levelUp(this.level)\n this.baseWidth = 30\n }\n } else if (this.baseWidth < 30) {\n if (this.level == 'week-day') {\n this.baseWidth = 30\n } else {\n this.level = levelDown(this.level)\n this.baseWidth = 60\n }\n }\n\n lastTouchDistance = currentDistance\n this.updateTimeScale()\n this.redraw()\n } else if (isDragging && startX !== null) {\n const touch = event.touches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const currentX = touch.clientX - containerOffsetX\n this.highlightSelection(startX, currentX)\n }\n }\n\n const handleTouchEnd = (event: TouchEvent) => {\n event.preventDefault() // 기본 터치 이벤트 막기\n\n if (event.touches.length < 2) {\n lastTouchDistance = null\n }\n\n if (!isDragging || startX === null) {\n // 클릭 이벤트 처리\n const touch = event.changedTouches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const clickX = touch.clientX - containerOffsetX\n this.finalizeSelection(clickX, clickX)\n return\n }\n\n const touch = event.changedTouches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const endX = touch.clientX - containerOffsetX\n this.finalizeSelection(startX, endX)\n\n isDragging = false\n startX = null\n }\n\n const getTouchDistance = (touches: TouchList): number => {\n const dx = touches[0].clientX - touches[1].clientX\n const dy = touches[0].clientY - touches[1].clientY\n return Math.sqrt(dx * dx + dy * dy)\n }\n\n const handleMouseDown = (event: MouseEvent) => {\n isDragging = true\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n startX = event.clientX - containerOffsetX\n }\n\n const handleMouseMove = (event: MouseEvent) => {\n if (!isDragging || startX === null) return\n\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const currentX = event.clientX - containerOffsetX\n this.highlightSelection(startX, currentX)\n }\n\n const handleMouseUp = (event: MouseEvent) => {\n if (!isDragging || startX === null) {\n // 클릭 이벤트 처리\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const clickX = event.clientX - containerOffsetX\n this.finalizeSelection(clickX, clickX)\n return\n }\n\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const endX = event.clientX - containerOffsetX\n this.finalizeSelection(startX, endX)\n\n isDragging = false\n startX = null\n }\n\n header.on('mousedown', handleMouseDown)\n header.on('mousemove', handleMouseMove)\n header.on('mouseup', handleMouseUp)\n header.on('touchstart', handleTouchStart)\n header.on('touchmove', handleTouchMove)\n header.on('touchend', handleTouchEnd)\n }\n\n highlightSelection(startX: number, endX: number) {\n const header = d3.select(this.svgHeader)\n const body = d3.select(this.svgBody)\n\n let startDate = this.timeScale.invert(startX)\n let endDate = this.timeScale.invert(endX)\n\n let start, end\n\n if (this.level === 'week-day') {\n start = d3.timeDay.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeDay.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.level === 'quarter-week') {\n start = d3.timeWeek.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeWeek.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.level === 'year-month') {\n start = d3.timeMonth.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.level === 'year-quarter') {\n start = d3.timeMonth.every(3)!.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.every(3)!.ceil(d3.max([startDate, endDate])!), -1)\n }\n\n header.selectAll('.selection-rect').remove()\n body.selectAll('.selection-rect').remove()\n\n header\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.timeScale(start!))\n .attr('y', 20)\n .attr('width', this.timeScale(end!) - this.timeScale(start!) + this.baseWidth / this.getScale())\n .attr('height', 20)\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n body\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.timeScale(start!))\n .attr('y', 0)\n .attr('width', this.timeScale(end!) - this.timeScale(start!) + this.baseWidth / this.getScale())\n .attr('height', '100%')\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n }\n\n finalizeSelection(startX: number, endX: number) {\n const header = d3.select(this.svgHeader)\n const body = d3.select(this.svgBody)\n\n let startDate = this.timeScale.invert(startX)\n let endDate = this.timeScale.invert(endX)\n\n let start, end\n\n if (this.level === 'week-day') {\n start = d3.timeDay.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeDay.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.level === 'quarter-week') {\n start = d3.timeWeek.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeWeek.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.level === 'year-month') {\n start = d3.timeMonth.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.level === 'year-quarter') {\n start = d3.timeMonth.every(3)!.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.every(3)!.ceil(d3.max([startDate, endDate])!), -1)\n }\n\n header.selectAll('.selection-rect').remove()\n body.selectAll('.selection-rect').remove()\n\n header\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.timeScale(start!))\n .attr('y', 20)\n .attr('width', this.timeScale(end!) - this.timeScale(start!) + this.baseWidth / this.getScale())\n .attr('height', 20)\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n body\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.timeScale(start!))\n .attr('y', 0)\n .attr('width', this.timeScale(end!) - this.timeScale(start!) + this.baseWidth / this.getScale())\n .attr('height', '100%')\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n const formatDate = d3.timeFormat('%Y-%m-%d')\n const customEvent = new CustomEvent('date-range-selected', {\n detail: { start: formatDate(start!), end: formatDate(end!) }\n })\n\n header.node()?.dispatchEvent(customEvent)\n }\n\n handleWheelForHeader(event: WheelEvent) {\n event.preventDefault()\n event.stopPropagation()\n\n if (event.altKey || event.ctrlKey || event.shiftKey || event.metaKey) {\n // 좌우 스크롤\n this.container.scrollBy({\n left: event.shiftKey ? event.deltaX : event.deltaY,\n behavior: 'smooth'\n })\n } else {\n // Zoom in/out\n const zoomFactor = event.deltaY < 0 ? 1.1 : 0.9\n this.baseWidth *= zoomFactor\n\n if (this.baseWidth > 40) {\n if (this.level == 'week-day') {\n this.baseWidth = 40\n } else {\n this.level = levelDown(this.level)\n this.baseWidth = 30\n }\n } else if (this.baseWidth < 30) {\n if (this.level == 'year-quarter') {\n this.baseWidth = 30\n }\n }\n if (this.baseWidth < 20) {\n this.level = levelUp(this.level)\n this.baseWidth = 30\n }\n\n this.updateTimeScale()\n this.redraw()\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ox-gantt-chart.js","sourceRoot":"","sources":["../../src/ox-gantt-chart.ts"],"names":[],"mappings":"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","sourcesContent":["import './ox-task-tooltip'\n\nimport { LitElement, html, css, PropertyValues, PropertyValueMap } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport * as d3 from 'd3'\nimport { locales } from './locales'\n\nimport { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { GanttChartController } from './gantt-chart-controller'\nimport { Task, TimeScale } from './types.js'\nimport { levelDown, levelUp } from './utils'\nimport { OxTaskTooltip } from './ox-task-tooltip.js'\n\n@customElement('ox-gantt-chart')\nexport class OxGanttChart extends LitElement {\n static styles = [\n MDTypeScaleStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n overflow: hidden;\n position: relative;\n }\n div[chart-container] {\n display: block;\n overflow-x: auto;\n overflow-y: hidden;\n }\n svg {\n min-width: 100%;\n }\n svg[header] {\n display: block;\n min-width: 100%;\n box-sizing: border-box;\n border-bottom: 1px solid var(--ox-gantt-header-border-color, var(--md-sys-color-on-secondary-container));\n height: 40px;\n background-color: var(--ox-gantt-header-background-color, var(--md-sys-color-secondary-container));\n color: var(--ox-gantt-header-color, var(--md-sys-color-on-secondary-container));\n\n position: sticky;\n top: 0;\n z-index: 1;\n }\n .top-axis text,\n .bottom-axis text {\n font-size: 12px;\n }\n .grid line {\n stroke: #e0e0e0;\n }\n .grid path {\n stroke-width: 0;\n }\n .no-select {\n user-select: none;\n }\n .selected {\n stroke-width: 2px;\n stroke: var(--ox-gantt-selected-color, blue);\n }\n `\n ]\n\n @property({ type: String, attribute: 'from-date' }) fromDate: string = new Date(new Date().getFullYear(), 0, 1)\n .toISOString()\n .split('T')[0]\n @property({ type: String, attribute: 'to-date' }) toDate: string = new Date(new Date().getFullYear(), 11, 31)\n .toISOString()\n .split('T')[0]\n @property({ type: String, attribute: 'axis-scale' }) axisScale: TimeScale = 'week-day'\n @property({ type: Boolean, attribute: 'extend-grid-lines' }) extendGridLines: boolean = false\n @property({ type: Array }) tasks: Task[] = []\n @property({ type: String, attribute: 'selected-task-id' }) selectedTaskId?: string\n @property({ type: String }) locale: string = 'en-US'\n\n @query('svg[header]') svgHeader!: SVGElement\n @query('svg[body]') svgBody!: SVGElement\n @query('[chart-container]') container!: HTMLDivElement\n @query('ox-task-tooltip') tooltip!: OxTaskTooltip // 툴팁 요소 쿼리 추가\n\n private ganttChartController: GanttChartController\n\n constructor() {\n super()\n this.ganttChartController = new GanttChartController(this, this.fromDate, this.toDate, this.axisScale)\n }\n\n protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {\n this.initHeaderGestureHandlers()\n }\n\n updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has('fromDate') || changedProperties.has('toDate')) {\n this.ganttChartController.updateRange(this.fromDate, this.toDate)\n }\n\n if (changedProperties.has('tasks')) {\n this.ganttChartController.setTasks(this.tasks)\n this.svgBody.style.height =\n Math.max(this.tasks.length * 30, 2000 /* 태스크가 많이 없어도, 빈 공간이 없도록, 충분히 높게 */) + 'px'\n }\n\n // Update locale\n if (changedProperties.has('locale')) {\n this.updateLocale(this.locale)\n }\n\n if (changedProperties.has('selectedTaskId')) {\n this.ganttChartController.selectedTaskId = this.selectedTaskId\n }\n\n if (changedProperties.has('extendGridLines')) {\n this.ganttChartController.extendGridLines = this.extendGridLines\n }\n\n if (changedProperties.has('axisScale')) {\n this.ganttChartController.level = this.axisScale\n this.ganttChartController.updateTimeScale()\n }\n\n this.ganttChartController.drawAxes(this.svgHeader)\n this.ganttChartController.drawBody(this.svgBody, this.tooltip)\n }\n\n render() {\n return html`\n <div\n chart-container\n @wheel=${(e: WheelEvent) => this.ganttChartController.handleWheelForBody(e, this.container)}\n @touchstart=${(e: TouchEvent) => this.ganttChartController.handleTouchStartForBody(e, this.container)}\n @touchmove=${(e: TouchEvent) => this.ganttChartController.handleTouchMoveForBody(e, this.container)}\n >\n <svg\n header\n @date-range-selected=${(e: CustomEvent) => console.log(e.detail)}\n @wheel=${this.handleWheelForHeader.bind(this)}\n ></svg>\n <svg body></svg>\n <ox-task-tooltip></ox-task-tooltip> // 툴팁 요소 추가\n </div>\n `\n }\n\n setVerticalOffset(offset: number) {\n this.container.scrollTop = offset\n }\n\n getVerticalOffset(): number {\n return this.container.scrollTop\n }\n\n handleWheelForHeader(event: WheelEvent) {\n event.preventDefault()\n event.stopPropagation()\n\n if (event.altKey || event.ctrlKey || event.shiftKey || event.metaKey) {\n this.container.scrollBy({\n left: event.shiftKey ? event.deltaX : event.deltaY\n })\n } else {\n const zoomFactor = event.deltaY < 0 ? 1.1 : 0.9\n this.ganttChartController.baseWidth *= zoomFactor\n\n if (this.ganttChartController.baseWidth > 40) {\n if (this.ganttChartController.level == 'week-day') {\n this.ganttChartController.baseWidth = 40\n } else {\n this.ganttChartController.level = levelDown(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 30\n }\n } else if (this.ganttChartController.baseWidth < 30) {\n if (this.ganttChartController.level == 'year-quarter') {\n this.ganttChartController.baseWidth = 30\n }\n }\n if (this.ganttChartController.baseWidth < 20) {\n this.ganttChartController.level = levelUp(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 30\n }\n\n this.ganttChartController.updateTimeScale()\n this.requestUpdate()\n }\n }\n\n updateLocale(locale: string) {\n const localeDefinition = (locales as any)[locale || 'en-US']\n if (localeDefinition) {\n d3.timeFormatDefaultLocale(localeDefinition)\n this.ganttChartController.updateTimeScale()\n }\n }\n\n initHeaderGestureHandlers() {\n const header = d3.select(this.svgHeader)\n\n let isDragging = false\n let startX: number | null = null\n let lastTouchDistance: number | null = null\n\n const handleTouchStart = (event: TouchEvent) => {\n event.preventDefault()\n\n if (event.touches.length === 2) {\n lastTouchDistance = getTouchDistance(event.touches)\n } else {\n isDragging = true\n const touch = event.touches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n startX = touch.clientX - containerOffsetX\n }\n }\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault()\n\n if (event.touches.length === 2 && lastTouchDistance !== null) {\n const currentDistance = getTouchDistance(event.touches)\n const zoomFactor = currentDistance / lastTouchDistance\n this.ganttChartController.baseWidth *= zoomFactor\n\n if (this.ganttChartController.baseWidth > 60) {\n if (this.ganttChartController.level == 'year-quarter') {\n this.ganttChartController.baseWidth = 60\n } else {\n this.ganttChartController.level = levelUp(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 30\n }\n } else if (this.ganttChartController.baseWidth < 30) {\n if (this.ganttChartController.level == 'week-day') {\n this.ganttChartController.baseWidth = 30\n } else {\n this.ganttChartController.level = levelDown(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 60\n }\n }\n\n lastTouchDistance = currentDistance\n this.ganttChartController.updateTimeScale()\n this.requestUpdate()\n } else if (isDragging && startX !== null) {\n const touch = event.touches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const currentX = touch.clientX - containerOffsetX\n this.highlightSelection(startX, currentX)\n }\n }\n\n const handleTouchEnd = (event: TouchEvent) => {\n event.preventDefault()\n\n if (event.touches.length < 2) {\n lastTouchDistance = null\n }\n\n if (!isDragging || startX === null) {\n const touch = event.changedTouches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const clickX = touch.clientX - containerOffsetX\n this.finalizeSelection(clickX, clickX)\n return\n }\n\n const touch = event.changedTouches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const endX = touch.clientX - containerOffsetX\n this.finalizeSelection(startX, endX)\n\n isDragging = false\n startX = null\n }\n\n const getTouchDistance = (touches: TouchList): number => {\n const dx = touches[0].clientX - touches[1].clientX\n const dy = touches[0].clientY - touches[1].clientY\n return Math.sqrt(dx * dx + dy * dy)\n }\n\n const handleMouseDown = (event: MouseEvent) => {\n isDragging = true\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n startX = event.clientX - containerOffsetX\n }\n\n const handleMouseMove = (event: MouseEvent) => {\n if (!isDragging || startX === null) return\n\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const currentX = event.clientX - containerOffsetX\n this.highlightSelection(startX, currentX)\n }\n\n const handleMouseUp = (event: MouseEvent) => {\n if (!isDragging || startX === null) {\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const clickX = event.clientX - containerOffsetX\n this.finalizeSelection(clickX, clickX)\n return\n }\n\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const endX = event.clientX - containerOffsetX\n this.finalizeSelection(startX, endX)\n\n isDragging = false\n startX = null\n }\n\n header.on('mousedown', handleMouseDown)\n header.on('mousemove', handleMouseMove)\n header.on('mouseup', handleMouseUp)\n header.on('touchstart', handleTouchStart)\n header.on('touchmove', handleTouchMove)\n header.on('touchend', handleTouchEnd)\n }\n\n highlightSelection(startX: number, endX: number) {\n const header = d3.select(this.svgHeader)\n const body = d3.select(this.svgBody)\n\n let startDate = this.ganttChartController.timeScale.invert(startX)\n let endDate = this.ganttChartController.timeScale.invert(endX)\n\n let start, end\n\n if (this.ganttChartController.level === 'week-day') {\n start = d3.timeDay.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeDay.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'quarter-week') {\n start = d3.timeWeek.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeWeek.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-month') {\n start = d3.timeMonth.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-quarter') {\n start = d3.timeMonth.every(3)!.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.every(3)!.ceil(d3.max([startDate, endDate])!), -1)\n }\n\n header.selectAll('.selection-rect').remove()\n body.selectAll('.selection-rect').remove()\n\n header\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 20)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', 20)\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n body\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 0)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', '100%')\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n }\n\n finalizeSelection(startX: number, endX: number) {\n const header = d3.select(this.svgHeader)\n const body = d3.select(this.svgBody)\n\n let startDate = this.ganttChartController.timeScale.invert(startX)\n let endDate = this.ganttChartController.timeScale.invert(endX)\n\n let start, end\n\n if (this.ganttChartController.level === 'week-day') {\n start = d3.timeDay.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeDay.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'quarter-week') {\n start = d3.timeWeek.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeWeek.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-month') {\n start = d3.timeMonth.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-quarter') {\n start = d3.timeMonth.every(3)!.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.every(3)!.ceil(d3.max([startDate, endDate])!), -1)\n }\n\n header.selectAll('.selection-rect').remove()\n body.selectAll('.selection-rect').remove()\n\n header\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 20)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', 20)\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n body\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 0)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', '100%')\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n const formatDate = d3.timeFormat('%Y-%m-%d')\n const customEvent = new CustomEvent('date-range-selected', {\n detail: { start: formatDate(start!), end: formatDate(end!) }\n })\n\n header.node()?.dispatchEvent(customEvent)\n }\n}\n"]}
@@ -4,10 +4,9 @@ export declare class OxGanttResizeSplitter extends LitElement {
4
4
  private dragstart?;
5
5
  connectedCallback(): void;
6
6
  render(): import("lit-html").TemplateResult<1>;
7
- _throttled(delay: number, fn: (...args: any) => void): (...args: any) => void;
8
7
  private onMouseDown;
9
- onMouseMoveHandler: (...args: any) => void;
10
- onMouseUpHandler: (e: MouseEvent) => void;
8
+ private onMouseMoveHandler;
9
+ private onMouseUpHandler;
11
10
  private onMouseMove;
12
11
  private onMouseUp;
13
12
  }
@@ -4,8 +4,8 @@ import { customElement } from 'lit/decorators.js';
4
4
  let OxGanttResizeSplitter = class OxGanttResizeSplitter extends LitElement {
5
5
  constructor() {
6
6
  super(...arguments);
7
- this.onMouseMoveHandler = this._throttled(100, this.onMouseMove.bind(this)); // this.onMouseMove.bind(this)
8
- this.onMouseUpHandler = this.onMouseUp.bind(this);
7
+ this.onMouseMoveHandler = (e) => this.onMouseMove(e);
8
+ this.onMouseUpHandler = (e) => this.onMouseUp(e);
9
9
  }
10
10
  static { this.styles = css `
11
11
  :host {
@@ -38,19 +38,7 @@ let OxGanttResizeSplitter = class OxGanttResizeSplitter extends LitElement {
38
38
  }
39
39
  }
40
40
  render() {
41
- return html ` <div @mousedown=${(e) => this.onMouseDown(e)}></div> `;
42
- }
43
- // TODO onDrag 이벤트가 계속 발생하므로 처리하는 성능 저하됨. 그래서 throttling 하도록 함
44
- _throttled(delay, fn) {
45
- let lastCall = 0;
46
- return function (...args) {
47
- const now = new Date().getTime();
48
- if (now - lastCall < delay) {
49
- return;
50
- }
51
- lastCall = now;
52
- return fn(...args);
53
- };
41
+ return html `<div @mousedown=${(e) => this.onMouseDown(e)}></div>`;
54
42
  }
55
43
  onMouseDown(e) {
56
44
  this.dragstart = {
@@ -61,6 +49,8 @@ let OxGanttResizeSplitter = class OxGanttResizeSplitter extends LitElement {
61
49
  bubbles: true,
62
50
  composed: true
63
51
  }));
52
+ this.parentElement.addEventListener('mousemove', this.onMouseMoveHandler);
53
+ this.parentElement.addEventListener('mouseup', this.onMouseUpHandler);
64
54
  window.addEventListener('mousemove', this.onMouseMoveHandler);
65
55
  window.addEventListener('mouseup', this.onMouseUpHandler);
66
56
  e.stopPropagation();
@@ -69,6 +59,14 @@ let OxGanttResizeSplitter = class OxGanttResizeSplitter extends LitElement {
69
59
  if (!this.dragstart) {
70
60
  return;
71
61
  }
62
+ const parentRect = this.parentElement.getBoundingClientRect();
63
+ if (e.clientX < parentRect.left ||
64
+ e.clientX > parentRect.right ||
65
+ e.clientY < parentRect.top ||
66
+ e.clientY > parentRect.bottom) {
67
+ this.onMouseUp(e);
68
+ return;
69
+ }
72
70
  e.preventDefault();
73
71
  this.dispatchEvent(new CustomEvent('splitter-drag', {
74
72
  bubbles: true,
@@ -78,9 +76,6 @@ let OxGanttResizeSplitter = class OxGanttResizeSplitter extends LitElement {
78
76
  y: e.clientY - this.dragstart.y
79
77
  }
80
78
  }));
81
- requestAnimationFrame(() => {
82
- dispatchEvent(new Event('resize'));
83
- });
84
79
  if (this.hasAttribute('vertical')) {
85
80
  document.body.style.cursor = 'col-resize';
86
81
  }
@@ -91,6 +86,8 @@ let OxGanttResizeSplitter = class OxGanttResizeSplitter extends LitElement {
91
86
  e.stopPropagation();
92
87
  }
93
88
  onMouseUp(e) {
89
+ this.parentElement.removeEventListener('mousemove', this.onMouseMoveHandler);
90
+ this.parentElement.removeEventListener('mouseup', this.onMouseUpHandler);
94
91
  window.removeEventListener('mousemove', this.onMouseMoveHandler);
95
92
  window.removeEventListener('mouseup', this.onMouseUpHandler);
96
93
  this.dispatchEvent(new CustomEvent('splitter-dragend', {
@@ -101,10 +98,6 @@ let OxGanttResizeSplitter = class OxGanttResizeSplitter extends LitElement {
101
98
  y: e.clientY - this.dragstart.y
102
99
  }
103
100
  }));
104
- requestAnimationFrame(() => {
105
- dispatchEvent(new Event('resize'));
106
- delete this.dragstart;
107
- });
108
101
  document.body.style.cursor = '';
109
102
  document.body.style.userSelect = '';
110
103
  e.stopPropagation();
@@ -1 +1 @@
1
- {"version":3,"file":"ox-gantt-resize-splitter.js","sourceRoot":"","sources":["../../src/ox-gantt-resize-splitter.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, css, html } from 'lit'\n\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('ox-gantt-resize-splitter')\nexport class OxGanttResizeSplitter extends LitElement {\n static styles = css`\n :host {\n position: relative;\n opacity: 0.7;\n background-color: var(--splitter-background-color);\n }\n\n :host(:hover) {\n background-color: var(--splitter-hover-background-color);\n }\n\n div {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n `\n\n private dragstart?: { x: number; y: number }\n\n connectedCallback() {\n super.connectedCallback()\n\n if (this.hasAttribute('vertical')) {\n this.style.width = '3px'\n this.style.height = '100%'\n this.style.cursor = 'col-resize'\n } else {\n this.style.width = '100%'\n this.style.height = '3px'\n this.style.cursor = 'row-resize'\n }\n }\n\n render() {\n return html` <div @mousedown=${(e: MouseEvent) => this.onMouseDown(e)}></div> `\n }\n\n // TODO onDrag 이벤트가 계속 발생하므로 처리하는 성능 저하됨. 그래서 throttling 하도록 함\n _throttled(delay: number, fn: (...args: any) => void) {\n let lastCall = 0\n return function (...args: any) {\n const now = new Date().getTime()\n if (now - lastCall < delay) {\n return\n }\n lastCall = now\n return fn(...args)\n }\n }\n\n private onMouseDown(e: MouseEvent) {\n this.dragstart = {\n x: e.clientX,\n y: e.clientY\n }\n\n this.dispatchEvent(\n new CustomEvent('splitter-dragstart', {\n bubbles: true,\n composed: true\n })\n )\n\n window.addEventListener('mousemove', this.onMouseMoveHandler)\n window.addEventListener('mouseup', this.onMouseUpHandler)\n\n e.stopPropagation()\n }\n\n onMouseMoveHandler = this._throttled(100, this.onMouseMove.bind(this)) // this.onMouseMove.bind(this)\n onMouseUpHandler = this.onMouseUp.bind(this)\n\n private onMouseMove(e: MouseEvent) {\n if (!this.dragstart) {\n return\n }\n\n e.preventDefault()\n\n this.dispatchEvent(\n new CustomEvent('splitter-drag', {\n bubbles: true,\n composed: true,\n detail: {\n x: e.clientX - this.dragstart!.x,\n y: e.clientY - this.dragstart!.y\n }\n })\n )\n requestAnimationFrame(() => {\n dispatchEvent(new Event('resize'))\n })\n\n if (this.hasAttribute('vertical')) {\n document.body.style.cursor = 'col-resize'\n } else {\n document.body.style.cursor = 'row-resize'\n }\n\n document.body.style.userSelect = 'none'\n\n e.stopPropagation()\n }\n\n private onMouseUp(e: MouseEvent) {\n window.removeEventListener('mousemove', this.onMouseMoveHandler)\n window.removeEventListener('mouseup', this.onMouseUpHandler)\n\n this.dispatchEvent(\n new CustomEvent('splitter-dragend', {\n bubbles: true,\n composed: true,\n detail: {\n x: e.clientX - this.dragstart!.x,\n y: e.clientY - this.dragstart!.y\n }\n })\n )\n\n requestAnimationFrame(() => {\n dispatchEvent(new Event('resize'))\n delete this.dragstart\n })\n\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n\n e.stopPropagation()\n }\n}\n"]}
1
+ {"version":3,"file":"ox-gantt-resize-splitter.js","sourceRoot":"","sources":["../../src/ox-gantt-resize-splitter.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('ox-gantt-resize-splitter')\nexport class OxGanttResizeSplitter extends LitElement {\n static styles = css`\n :host {\n position: relative;\n opacity: 0.7;\n background-color: var(--splitter-background-color);\n }\n\n :host(:hover) {\n background-color: var(--splitter-hover-background-color);\n }\n\n div {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n `\n\n private dragstart?: { x: number; y: number }\n\n connectedCallback() {\n super.connectedCallback()\n\n if (this.hasAttribute('vertical')) {\n this.style.width = '3px'\n this.style.height = '100%'\n this.style.cursor = 'col-resize'\n } else {\n this.style.width = '100%'\n this.style.height = '3px'\n this.style.cursor = 'row-resize'\n }\n }\n\n render() {\n return html`<div @mousedown=${(e: MouseEvent) => this.onMouseDown(e)}></div>`\n }\n\n private onMouseDown(e: MouseEvent) {\n this.dragstart = {\n x: e.clientX,\n y: e.clientY\n }\n\n this.dispatchEvent(\n new CustomEvent('splitter-dragstart', {\n bubbles: true,\n composed: true\n })\n )\n\n this.parentElement!.addEventListener('mousemove', this.onMouseMoveHandler)\n this.parentElement!.addEventListener('mouseup', this.onMouseUpHandler)\n window.addEventListener('mousemove', this.onMouseMoveHandler)\n window.addEventListener('mouseup', this.onMouseUpHandler)\n\n e.stopPropagation()\n }\n\n private onMouseMoveHandler = (e: MouseEvent) => this.onMouseMove(e)\n private onMouseUpHandler = (e: MouseEvent) => this.onMouseUp(e)\n\n private onMouseMove(e: MouseEvent) {\n if (!this.dragstart) {\n return\n }\n\n const parentRect = this.parentElement!.getBoundingClientRect()\n if (\n e.clientX < parentRect.left ||\n e.clientX > parentRect.right ||\n e.clientY < parentRect.top ||\n e.clientY > parentRect.bottom\n ) {\n this.onMouseUp(e)\n return\n }\n\n e.preventDefault()\n\n this.dispatchEvent(\n new CustomEvent('splitter-drag', {\n bubbles: true,\n composed: true,\n detail: {\n x: e.clientX - this.dragstart!.x,\n y: e.clientY - this.dragstart!.y\n }\n })\n )\n\n if (this.hasAttribute('vertical')) {\n document.body.style.cursor = 'col-resize'\n } else {\n document.body.style.cursor = 'row-resize'\n }\n\n document.body.style.userSelect = 'none'\n\n e.stopPropagation()\n }\n\n private onMouseUp(e: MouseEvent) {\n this.parentElement!.removeEventListener('mousemove', this.onMouseMoveHandler)\n this.parentElement!.removeEventListener('mouseup', this.onMouseUpHandler)\n window.removeEventListener('mousemove', this.onMouseMoveHandler)\n window.removeEventListener('mouseup', this.onMouseUpHandler)\n\n this.dispatchEvent(\n new CustomEvent('splitter-dragend', {\n bubbles: true,\n composed: true,\n detail: {\n x: e.clientX - this.dragstart!.x,\n y: e.clientY - this.dragstart!.y\n }\n })\n )\n\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n\n e.stopPropagation()\n }\n}\n"]}
@@ -2,23 +2,37 @@ import { LitElement, PropertyValues, PropertyValueMap } from 'lit';
2
2
  import './ox-gantt-chart.js';
3
3
  import './ox-gantt-resize-splitter.js';
4
4
  import { OxGanttChart } from './ox-gantt-chart.js';
5
- import { Task } from './types.js';
5
+ import { ColumnConfig, Task, TimeScale } from './types.js';
6
6
  export declare class OxGantt extends LitElement {
7
7
  static styles: import("lit").CSSResult[];
8
8
  tasks: Task[];
9
9
  fromDate: string;
10
10
  toDate: string;
11
+ extendGridLines: boolean;
12
+ timeScale: TimeScale;
13
+ columnConfig: ColumnConfig[];
14
+ selectedTaskId?: string;
11
15
  container: HTMLDivElement;
12
16
  taskContainer: HTMLDivElement;
13
17
  chartContainer: HTMLDivElement;
14
18
  taskTable: HTMLTableElement;
15
19
  ganttChart: OxGanttChart;
16
20
  private _startWidth;
21
+ private _isDragging;
17
22
  render(): import("lit-html").TemplateResult<1>;
18
- renderTaskTable(): import("lit-html").TemplateResult<1>;
23
+ renderTaskTable(): import("lit-html").TemplateResult<1> | undefined;
24
+ getTaskFieldValue(task: Task, field: string): string | number;
25
+ mergeTasksBySection(tasks: Task[]): Array<{
26
+ task: Task;
27
+ showSection: boolean;
28
+ rowSpan: number;
29
+ }>;
30
+ selectTask(taskId: string): void;
31
+ handleTaskClicked(event: CustomEvent): void;
19
32
  protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
20
33
  updated(changes: PropertyValues<this>): void;
21
- syncScroll(): void;
34
+ syncScroll(e: Event): void;
22
35
  resizeStart(e: CustomEvent): void;
23
36
  resizeDrag(e: CustomEvent): void;
37
+ resizeEnd(e: CustomEvent): void;
24
38
  }