@wimi/vtable-gantt 1.0.3 → 1.0.4

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 (77) hide show
  1. package/cjs/Gantt.d.ts +19 -0
  2. package/cjs/Gantt.js +135 -9
  3. package/cjs/Gantt.js.map +1 -1
  4. package/cjs/event/event-manager.js +17 -6
  5. package/cjs/event/event-manager.js.map +1 -1
  6. package/cjs/event/scroll.js +2 -1
  7. package/cjs/event/touch.js +0 -1
  8. package/cjs/gantt-helper.d.ts +7 -0
  9. package/cjs/gantt-helper.js +76 -66
  10. package/cjs/gantt-helper.js.map +1 -1
  11. package/cjs/index.d.ts +1 -1
  12. package/cjs/index.js +1 -1
  13. package/cjs/index.js.map +1 -1
  14. package/cjs/plugins/index.js.map +1 -1
  15. package/cjs/scenegraph/dependency-link.js +28 -38
  16. package/cjs/scenegraph/dependency-link.js.map +1 -1
  17. package/cjs/scenegraph/grid.js +11 -10
  18. package/cjs/scenegraph/grid.js.map +1 -1
  19. package/cjs/scenegraph/mark-line.js +10 -12
  20. package/cjs/scenegraph/mark-line.js.map +1 -1
  21. package/cjs/scenegraph/task-bar.d.ts +11 -1
  22. package/cjs/scenegraph/task-bar.js +189 -29
  23. package/cjs/scenegraph/task-bar.js.map +1 -1
  24. package/cjs/scenegraph/timeline-header.js +2 -6
  25. package/cjs/scenegraph/timeline-header.js.map +1 -1
  26. package/cjs/state/state-manager.js +23 -18
  27. package/cjs/state/state-manager.js.map +1 -1
  28. package/cjs/tools/isx.d.ts +1 -1
  29. package/cjs/tools/util.js +2 -1
  30. package/cjs/tools/util.js.map +1 -1
  31. package/cjs/ts-types/gantt-engine.d.ts +8 -0
  32. package/cjs/ts-types/gantt-engine.js +2 -1
  33. package/cjs/ts-types/gantt-engine.js.map +1 -1
  34. package/cjs/zoom-scale/DataZoomIntegration.d.ts +2 -0
  35. package/cjs/zoom-scale/DataZoomIntegration.js +32 -20
  36. package/cjs/zoom-scale/DataZoomIntegration.js.map +1 -1
  37. package/cjs/zoom-scale/ZoomScaleManager.js +1 -2
  38. package/dist/vtable-gantt.js +4153 -1803
  39. package/dist/vtable-gantt.min.js +1 -15
  40. package/es/Gantt.d.ts +19 -0
  41. package/es/Gantt.js +135 -8
  42. package/es/Gantt.js.map +1 -1
  43. package/es/event/event-manager.js +17 -6
  44. package/es/event/event-manager.js.map +1 -1
  45. package/es/event/scroll.js +2 -1
  46. package/es/event/touch.js +1 -2
  47. package/es/gantt-helper.d.ts +7 -0
  48. package/es/gantt-helper.js +75 -63
  49. package/es/gantt-helper.js.map +1 -1
  50. package/es/index.d.ts +1 -1
  51. package/es/index.js +1 -1
  52. package/es/index.js.map +1 -1
  53. package/es/plugins/index.js.map +1 -1
  54. package/es/scenegraph/dependency-link.js +29 -27
  55. package/es/scenegraph/dependency-link.js.map +1 -1
  56. package/es/scenegraph/grid.js +9 -11
  57. package/es/scenegraph/grid.js.map +1 -1
  58. package/es/scenegraph/mark-line.js +10 -11
  59. package/es/scenegraph/mark-line.js.map +1 -1
  60. package/es/scenegraph/task-bar.d.ts +11 -1
  61. package/es/scenegraph/task-bar.js +190 -29
  62. package/es/scenegraph/task-bar.js.map +1 -1
  63. package/es/scenegraph/timeline-header.js +3 -5
  64. package/es/scenegraph/timeline-header.js.map +1 -1
  65. package/es/state/state-manager.js +24 -19
  66. package/es/state/state-manager.js.map +1 -1
  67. package/es/tools/isx.d.ts +1 -1
  68. package/es/tools/util.js +2 -1
  69. package/es/tools/util.js.map +1 -1
  70. package/es/ts-types/gantt-engine.d.ts +8 -0
  71. package/es/ts-types/gantt-engine.js +2 -1
  72. package/es/ts-types/gantt-engine.js.map +1 -1
  73. package/es/zoom-scale/DataZoomIntegration.d.ts +2 -0
  74. package/es/zoom-scale/DataZoomIntegration.js +32 -20
  75. package/es/zoom-scale/DataZoomIntegration.js.map +1 -1
  76. package/es/zoom-scale/ZoomScaleManager.js +1 -2
  77. package/package.json +11 -9
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scenegraph/grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,MAAM,OAAO,IAAI;IAqBf,YAAY,KAAiB;;QAC3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;QAC9F,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACzD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;YACrB,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,MAAA,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,0CAAE,eAAe;SACvD,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,gBAAgB,CAAC;QACnC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACvC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,8BAA8B,EAAE,CAAC;QACtC,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACnC,CAAC;IAED,8BAA8B;;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAEjD,MAAM,wBAAwB,GAC5B,MAAA,MAAA,OAAO,CAAC,mBAAmB,0CAAE,SAAS,mCAAI,MAAA,OAAO,CAAC,iCAAiC,0CAAE,SAAS,CAAC;QACjG,MAAM,WAAW,GAAG,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,wBAAwB,GAAG,CAAC,CAAC;QAC7F,MAAM,IAAI,GAAG,UAAU,CAAC;YACtB,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,MAAA,MAAA,OAAO,CAAC,mBAAmB,0CAAE,SAAS,mCAAI,MAAA,OAAO,CAAC,iCAAiC,0CAAE,SAAS;YACtG,SAAS,EAAE,wBAAwB,GAAG,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,QAAQ,EAAE,MAAA,MAAA,OAAO,CAAC,mBAAmB,0CAAE,QAAQ,mCAAI,MAAA,OAAO,CAAC,iCAAiC,0CAAE,QAAQ;YACtG,MAAM,EAAE;gBACN,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE;gBACxB;oBACE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE;oBAC3C,CAAC,EAAE,WAAW;iBACf;aACF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,mBAAmB;;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;QACxD,MAAM,iCAAiC,GACrC,MAAA,SAAS,CAAC,iCAAiC,mCAC3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvE,IAAI,SAAS,CAAC,YAAY,EAAE;YAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,KAAK,CAAC;gBACjC,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,MAAM,EAAE,IAAI,CAAC,aAAa;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,eAAe,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAE/C,MAAM,qBAAqB,GACzB,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,IAAI,CAC/D,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,iCAAiC,CAC1D,mCAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;YAChG,MAAM,EAAE,aAAa,EAAE,GAAG,qBAAqB,CAAC;YAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC;YAE3E,IAAI,OAAO,SAAS,CAAC,YAAY,KAAK,UAAU,EAAE;gBAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,IAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAClD,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBACrC,MAAM,kBAAkB,GAAG,SAAS,CAAC,YAAY,CAAC;wBAChD,KAAK,EAAE,CAAC;wBACR,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;wBACrC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO;wBAC9B,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAClC,CAAC,CAAC;oBACH,MAAM,CAAC,GACL,IAAI,CAAC,IAAI,CACP,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC1F,gBAAgB,CACnB,GAAG,CAAC,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEnD,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,kBAAkB,CAAC,SAAS;wBACpC,SAAS,EAAE,kBAAkB,CAAC,SAAS;wBACvC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;wBACrC,MAAM,EAAE;4BACN,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;4BACX,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE;yBAC7B;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC1C;aACF;iBAAM;gBACL,MAAM,kBAAkB,GAAG,SAAS,CAAC,YAAY,CAAC;gBAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,IAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAClD,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBACrC,MAAM,CAAC,GACL,IAAI,CAAC,IAAI,CACP,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC1F,gBAAgB,CACnB,GAAG,CAAC,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEnD,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,kBAAkB,CAAC,SAAS;wBACpC,SAAS,EAAE,kBAAkB,CAAC,SAAS;wBACvC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;wBACrC,MAAM,EAAE;4BACN,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;4BACX,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE;yBAC7B;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC1C;aACF;SACF;IACH,CAAC;IACD,qBAAqB;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;QACxD,IAAI,SAAS,CAAC,cAAc,EAAE;YAC5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,KAAK,CAAC;gBACnC,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,MAAM,EAAE,IAAI,CAAC,aAAa;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,iBAAiB,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjD,IAAI,OAAO,SAAS,CAAC,cAAc,KAAK,UAAU,EAAE;gBAClD,IAAI,CAAC,GAAG,GAAG,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1C,MAAM,oBAAoB,GAAG,SAAS,CAAC,cAAc,CAAC;wBACpD,KAAK,EAAE,CAAC;wBACR,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAClC,CAAC,CAAC;oBACH,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;oBAClD,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,oBAAoB,CAAC,SAAS;wBACtC,SAAS,EAAE,oBAAoB,CAAC,SAAS;wBACzC,QAAQ,EAAE,oBAAoB,CAAC,QAAQ;wBACvC,MAAM,EAAE;4BACN,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;4BACX,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE;yBAC5B;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC5C;aACF;iBAAM;gBACL,MAAM,oBAAoB,GAAG,SAAS,CAAC,cAAc,CAAC;gBACtD,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,oBAAoB,CAAC,SAAS,GAAG,CAAC,EAAE;oBACtC,CAAC,IAAI,GAAG,CAAC;iBACV;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1C,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;oBAClD,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,oBAAoB,CAAC,SAAS;wBACtC,SAAS,EAAE,oBAAoB,CAAC,SAAS;wBACzC,QAAQ,EAAE,oBAAoB,CAAC,QAAQ;wBACvC,MAAM,EAAE;4BACN,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;4BACX,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE;yBAC5B;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC5C;aACF;SACF;IACH,CAAC;IAED,6BAA6B;QAC3B,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC;QAC9F,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC;QAC5F,IAAI,uBAAuB,IAAI,sBAAsB,EAAE;YACrD,IAAI,CAAC,4BAA4B,GAAG,IAAI,KAAK,CAAC;gBAC5C,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,MAAM,EAAE,IAAI,CAAC,aAAa;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,4BAA4B,CAAC,IAAI,GAAG,0BAA0B,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAE1D,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;YACtG,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC;YAE3E,IAAI,uBAAuB,IAAI,sBAAsB,EAAE;gBACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,IAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACnD,IAAI,eAAe,CAAC;oBACpB,IACE,sBAAsB;wBACtB,IAAI,KAAK,KAAK;wBACd,IAAI,KAAK,CAAC;wBACV,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EACxF;wBACA,eAAe,GAAG,sBAAsB,CAAC;qBAC1C;yBAAM,IAAI,OAAO,uBAAuB,KAAK,UAAU,EAAE;wBACxD,eAAe,GAAG,uBAAuB,CAAC;4BACxC,KAAK,EAAE,CAAC;4BACR,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;4BACrC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO;4BAC9B,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;yBAClC,CAAC,CAAC;qBACJ;yBAAM,IAAI,uBAAuB,EAAE;wBAClC,eAAe,GAAG,uBAAuB,CAAC,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;qBAC/E;oBACD,IAAI,eAAe,EAAE;wBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;wBAC1C,MAAM,IAAI,GAAG,UAAU,CAAC;4BACtB,QAAQ,EAAE,KAAK;4BACf,IAAI,EAAE,eAAe;4BACrB,CAAC;4BACD,CAAC,EAAE,CAAC;4BACJ,KAAK,EAAE,gBAAgB;4BACvB,MAAM,EAAE,IAAI,CAAC,aAAa;yBAC3B,CAAC,CAAC;wBACH,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;qBACrD;iBACF;aACF;SACF;IACH,CAAC;IACD,+BAA+B;QAC7B,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC;QAClG,IAAI,yBAAyB,EAAE;YAC7B,IAAI,CAAC,8BAA8B,GAAG,IAAI,KAAK,CAAC;gBAC9C,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,MAAM,EAAE,IAAI,CAAC,aAAa;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,8BAA8B,CAAC,IAAI,GAAG,4BAA4B,CAAC;YACxE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAE5D,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAI,eAAe,CAAC;gBACpB,IAAI,OAAO,yBAAyB,KAAK,UAAU,EAAE;oBACnD,eAAe,GAAG,yBAAyB,CAAC;wBAC1C,KAAK,EAAE,CAAC;wBACR,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAClC,CAAC,CAAC;iBACJ;qBAAM;oBACL,eAAe,GAAG,yBAAyB,CAAC,CAAC,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;iBACnF;gBAED,MAAM,IAAI,GAAG,UAAU,CAAC;oBACtB,QAAQ,EAAE,KAAK;oBACf,IAAI,EAAE,eAAe;oBACrB,CAAC,EAAE,CAAC;oBACJ,CAAC;oBACD,KAAK,EAAE,IAAI,CAAC,YAAY;oBACxB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;iBAClD,CAAC,CAAC;gBACH,IAAI,CAAC,8BAA8B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACtD,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;aAChD;SACF;IACH,CAAC;IAED,yBAAyB;;QACvB,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAGtF,IAAI,CAAC,mBAAmB,EAAE;YACxB,OAAO;SACR;QAGD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC;YACxB,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;SAC3B,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC;QAEtC,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,aAAa,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,mCAAI,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;QACtC,MAAM,gBAAgB,GAAW,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC;QACnF,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,SAAS,GAAW,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAEpE,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;gBACjC,MAAM,SAAS,GAAqB,MAAA,aAAa,CAAC,CAAC,CAAC,0CAAE,SAAS,CAAC;gBAChE,MAAM,OAAO,GAAqB,MAAA,aAAa,CAAC,CAAC,CAAC,0CAAE,OAAO,CAAC;gBAG5D,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE;oBAC1B,CAAC,IAAI,gBAAgB,CAAC;oBACtB,SAAS;iBACV;gBAED,MAAM,MAAM,GACV,OAAO,mBAAmB,KAAK,UAAU;oBACvC,CAAC,CAAC,mBAAmB,CAAC;wBAClB,QAAQ,EAAE,CAAC;wBACX,QAAQ,EAAE,CAAC;wBACX,IAAI,EAAE,SAAS;wBACf,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAClC,CAAC;oBACJ,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBAEhE,IAAI,CAAC,MAAM,EAAE;oBACX,CAAC,IAAI,gBAAgB,CAAC;oBACtB,SAAS;iBACV;gBAGD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAG9D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBAClE,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;wBACpB,CAAC;wBACD,CAAC;wBACD,KAAK,EAAE,gBAAgB;wBACvB,MAAM,EAAE,SAAS;qBAClB,CAAC,CAAC;oBAEH,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAC1B,CAAC,IAAI,gBAAgB,CAAC;oBACtB,SAAS;iBACV;gBAGD,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;gBAEtB,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;oBAC7B,IAAI,CAAC,GAAG,EAAE;wBACR,SAAS;qBACV;oBAED,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;oBAC1C,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;wBACpC,SAAS;qBACV;oBAED,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;oBAC/B,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;oBAG7B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;wBACxB,SAAS;qBACV;oBAGD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;oBACpD,MAAM,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,gBAAgB,CAAC;oBAEvD,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;oBAClD,MAAM,UAAU,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,gBAAgB,CAAC;oBAEhE,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,IAAI,EAAE,KAAK;wBACX,CAAC,EAAE,WAAW;wBACd,CAAC;wBACD,KAAK,EAAE,UAAU;wBACjB,MAAM,EAAE,SAAS;qBAClB,CAAC,CAAC;oBAEH,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC3B;gBAED,CAAC,IAAI,gBAAgB,CAAC;aACvB;YAED,CAAC,IAAI,SAAS,CAAC;SAChB;IACH,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;QAC1G,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE;SAC/C,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC7D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAK5B,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACvC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,8BAA8B,EAAE,CAAC;QACtC,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,CAAS;;QACZ,MAAA,IAAI,CAAC,iBAAiB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAA,IAAI,CAAC,mBAAmB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAA,IAAI,CAAC,4BAA4B,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxD,MAAA,IAAI,CAAC,8BAA8B,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAA,IAAI,CAAC,wBAAwB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,CAAS;;QACZ,MAAA,IAAI,CAAC,iBAAiB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAA,IAAI,CAAC,mBAAmB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAA,IAAI,CAAC,4BAA4B,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxD,MAAA,IAAI,CAAC,8BAA8B,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAA,IAAI,CAAC,wBAAwB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM;QACJ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;QAC1G,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;CACF","file":"grid.js","sourcesContent":["import { Group, createLine, createRect } from '@visactor/vtable/es/vrender';\n\nimport type { Scenegraph } from './scenegraph';\nimport type { IGrid } from '../ts-types';\nimport { computeCountToTimeScale } from '../tools/util';\nexport class Grid {\n // verticalLineSpace: number;\n // horizontalLineSpace: number;\n gridStyle: IGrid;\n scrollLeft: number;\n scrollTop: number;\n x: number;\n y: number;\n width: number;\n height: number;\n rowHeight: number;\n rowCount: number;\n group: Group;\n verticalLineGroup: Group;\n horizontalLineGroup: Group;\n verticalBackgroundRectsGroup: Group;\n horizontalBackgroundRectsGroup: Group;\n cellBackgroundRectsGroup: Group;\n allGridHeight: number;\n allGridWidth: number;\n _scene: Scenegraph;\n constructor(scene: Scenegraph) {\n this._scene = scene;\n\n this.scrollLeft = 0;\n this.scrollTop = 0;\n this.x = 0;\n this.y = scene._gantt.getAllHeaderRowsHeight();\n this.width = scene.ganttGroup.attribute.width;\n this.height = scene.ganttGroup.attribute.height - scene.timelineHeader.group.attribute.height;\n this.rowHeight = scene._gantt.parsedOptions.rowHeight;\n this.rowCount = scene._gantt.itemCount;\n this.allGridWidth = scene._gantt.getAllDateColsWidth();\n this.allGridHeight = scene._gantt.getAllTaskBarsHeight();\n this.group = new Group({\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n clip: true,\n fill: scene._gantt.parsedOptions.grid?.backgroundColor\n });\n this.group.name = 'grid-container';\n scene.ganttGroup.addChild(this.group);\n this.createHorizontalBackgroundRects();\n this.createVerticalLines();\n this.createHorizontalLines();\n this.createTimeLineHeaderBottomLine();\n this.createCellBackgroundRects();\n }\n\n createTimeLineHeaderBottomLine() {\n const options = this._scene._gantt.parsedOptions;\n //补充timelineHeader中不好绘制的底部的边线\n const horizontalSplitLineWidth =\n options.horizontalSplitLine?.lineWidth ?? options.timelineHeaderHorizontalLineStyle?.lineWidth;\n const bottomLineY = (horizontalSplitLineWidth & 1 ? -0.5 : 0) + horizontalSplitLineWidth / 2; // 原来是(horizontalSplitLineWidth & 1 ? 0.5 : 0) 这里改成-0.5为了和左侧表格的水平分割线对齐\n const line = createLine({\n pickable: false,\n stroke: options.horizontalSplitLine?.lineColor ?? options.timelineHeaderHorizontalLineStyle?.lineColor,\n lineWidth: horizontalSplitLineWidth + (horizontalSplitLineWidth & 1 ? 1 : 0), // 加上后面这个1是为了和左侧表格的水平分割线对齐\n lineDash: options.horizontalSplitLine?.lineDash ?? options.timelineHeaderHorizontalLineStyle?.lineDash,\n points: [\n { x: 0, y: bottomLineY },\n {\n x: this._scene._gantt.getAllDateColsWidth(),\n y: bottomLineY\n }\n ]\n });\n line.name = 'timeLine-header-bottom-line';\n this.group.addChild(line);\n }\n\n createVerticalLines() {\n const gridStyle = this._scene._gantt.parsedOptions.grid;\n const verticalLineDependenceOnTimeScale =\n gridStyle.verticalLineDependenceOnTimeScale ??\n this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0].unit;\n\n if (gridStyle.verticalLine) {\n this.verticalLineGroup = new Group({\n x: 0,\n y: 0,\n width: this.allGridWidth,\n height: this.allGridHeight\n });\n this.verticalLineGroup.name = 'grid-vertical';\n this.group.appendChild(this.verticalLineGroup);\n\n const dependenceOnTimeScale =\n this._scene._gantt.parsedOptions.reverseSortedTimelineScales.find(\n scale => scale.unit === verticalLineDependenceOnTimeScale\n ) ?? this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0];\n const { unit: minUnit, step } = this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0];\n const { timelineDates } = dependenceOnTimeScale;\n const timelineColWidth = this._scene._gantt.parsedOptions.timelineColWidth;\n\n if (typeof gridStyle.verticalLine === 'function') {\n for (let i = 0; i < timelineDates?.length - 1; i++) {\n const { endDate } = timelineDates[i];\n const verticalLine_style = gridStyle.verticalLine({\n index: i,\n dateIndex: timelineDates[i].dateIndex,\n date: timelineDates[i].endDate,\n ganttInstance: this._scene._gantt\n });\n const x =\n Math.ceil(\n computeCountToTimeScale(endDate, this._scene._gantt.parsedOptions.minDate, minUnit, step, 1) *\n timelineColWidth\n ) + (verticalLine_style.lineWidth & 1 ? 0.5 : 0);\n // const x = Math.ceil(timelineColWidth * (i + 1)) + (verticalLine_style.lineWidth & 1 ? 0.5 : 0);\n const line = createLine({\n pickable: false,\n stroke: verticalLine_style.lineColor,\n lineWidth: verticalLine_style.lineWidth,\n lineDash: verticalLine_style.lineDash,\n points: [\n { x, y: 0 },\n { x, y: this.allGridHeight }\n ]\n });\n this.verticalLineGroup.appendChild(line);\n }\n } else {\n const verticalLine_style = gridStyle.verticalLine;\n for (let i = 0; i < timelineDates?.length - 1; i++) {\n const { endDate } = timelineDates[i];\n const x =\n Math.ceil(\n computeCountToTimeScale(endDate, this._scene._gantt.parsedOptions.minDate, minUnit, step, 1) *\n timelineColWidth\n ) + (verticalLine_style.lineWidth & 1 ? 0.5 : 0);\n // const x = Math.ceil(timelineColWidth * (i + 1)) + (verticalLine_style.lineWidth & 1 ? 0.5 : 0);\n const line = createLine({\n pickable: false,\n stroke: verticalLine_style.lineColor,\n lineWidth: verticalLine_style.lineWidth,\n lineDash: verticalLine_style.lineDash,\n points: [\n { x, y: 0 },\n { x, y: this.allGridHeight }\n ]\n });\n this.verticalLineGroup.appendChild(line);\n }\n }\n }\n }\n createHorizontalLines() {\n const gridStyle = this._scene._gantt.parsedOptions.grid;\n if (gridStyle.horizontalLine) {\n this.horizontalLineGroup = new Group({\n x: 0,\n y: 0,\n width: this.allGridWidth,\n height: this.allGridHeight\n });\n this.horizontalLineGroup.name = 'grid-horizontal';\n this.group.appendChild(this.horizontalLineGroup);\n if (typeof gridStyle.horizontalLine === 'function') {\n let y = 0.5; //确保大多数情况 LineWidth为1时是准确的\n for (let i = 0; i < this.rowCount - 1; i++) {\n const horizontalLine_style = gridStyle.horizontalLine({\n index: i,\n ganttInstance: this._scene._gantt\n });\n y = y + this._scene._gantt.getRowHeightByIndex(i); // Math.floor(this.rowHeight);\n const line = createLine({\n pickable: false,\n stroke: horizontalLine_style.lineColor,\n lineWidth: horizontalLine_style.lineWidth,\n lineDash: horizontalLine_style.lineDash,\n points: [\n { x: 0, y },\n { x: this.allGridWidth, y }\n ]\n });\n this.horizontalLineGroup.appendChild(line);\n }\n } else {\n const horizontalLine_style = gridStyle.horizontalLine;\n let y = 0;\n if (horizontalLine_style.lineWidth & 1) {\n y += 0.5;\n }\n for (let i = 0; i < this.rowCount - 1; i++) {\n y = y + this._scene._gantt.getRowHeightByIndex(i); // Math.floor(this.rowHeight);\n const line = createLine({\n pickable: false,\n stroke: horizontalLine_style.lineColor,\n lineWidth: horizontalLine_style.lineWidth,\n lineDash: horizontalLine_style.lineDash,\n points: [\n { x: 0, y },\n { x: this.allGridWidth, y }\n ]\n });\n this.horizontalLineGroup.appendChild(line);\n }\n }\n }\n }\n\n createVerticalBackgroundRects() {\n const verticalBackgroundColor = this._scene._gantt.parsedOptions.grid.verticalBackgroundColor;\n const weekendBackgroundColor = this._scene._gantt.parsedOptions.grid.weekendBackgroundColor;\n if (verticalBackgroundColor || weekendBackgroundColor) {\n this.verticalBackgroundRectsGroup = new Group({\n x: 0,\n y: 0,\n width: this.allGridWidth,\n height: this.allGridHeight\n });\n this.verticalBackgroundRectsGroup.name = 'grid-vertical-background';\n this.group.appendChild(this.verticalBackgroundRectsGroup);\n\n const { timelineDates, unit, step } = this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0];\n const timelineColWidth = this._scene._gantt.parsedOptions.timelineColWidth;\n\n if (verticalBackgroundColor || weekendBackgroundColor) {\n for (let i = 0; i <= timelineDates?.length - 1; i++) {\n let backgroundColor;\n if (\n weekendBackgroundColor &&\n unit === 'day' &&\n step === 1 &&\n (timelineDates[i].startDate.getDay() === 0 || timelineDates[i].startDate.getDay() === 6)\n ) {\n backgroundColor = weekendBackgroundColor;\n } else if (typeof verticalBackgroundColor === 'function') {\n backgroundColor = verticalBackgroundColor({\n index: i,\n dateIndex: timelineDates[i].dateIndex,\n date: timelineDates[i].endDate,\n ganttInstance: this._scene._gantt\n });\n } else if (verticalBackgroundColor) {\n backgroundColor = verticalBackgroundColor[i % verticalBackgroundColor.length];\n }\n if (backgroundColor) {\n const x = Math.ceil(timelineColWidth * i);\n const rect = createRect({\n pickable: false,\n fill: backgroundColor,\n x,\n y: 0,\n width: timelineColWidth,\n height: this.allGridHeight\n });\n this.verticalBackgroundRectsGroup.appendChild(rect);\n }\n }\n }\n }\n }\n createHorizontalBackgroundRects() {\n const horizontalBackgroundColor = this._scene._gantt.parsedOptions.grid.horizontalBackgroundColor;\n if (horizontalBackgroundColor) {\n this.horizontalBackgroundRectsGroup = new Group({\n x: 0,\n y: 0,\n width: this.allGridWidth,\n height: this.allGridHeight\n });\n this.horizontalBackgroundRectsGroup.name = 'grid-horizontal-background';\n this.group.appendChild(this.horizontalBackgroundRectsGroup);\n\n let y = 0;\n for (let i = 0; i <= this.rowCount - 1; i++) {\n let backgroundColor;\n if (typeof horizontalBackgroundColor === 'function') {\n backgroundColor = horizontalBackgroundColor({\n index: i,\n ganttInstance: this._scene._gantt\n });\n } else {\n backgroundColor = horizontalBackgroundColor[i % horizontalBackgroundColor.length];\n }\n\n const rect = createRect({\n pickable: false,\n fill: backgroundColor,\n x: 0,\n y,\n width: this.allGridWidth,\n height: this._scene._gantt.getRowHeightByIndex(i)\n });\n this.horizontalBackgroundRectsGroup.appendChild(rect);\n y += this._scene._gantt.getRowHeightByIndex(i);\n }\n }\n }\n\n createCellBackgroundRects() {\n const cellBackgroundColor = this._scene._gantt.parsedOptions.grid.cellBackgroundColor;\n\n // 没配置就不画\n if (!cellBackgroundColor) {\n return;\n }\n\n // 建一个 group 专门放背景 rect\n const bgGroup = new Group({\n x: 0,\n y: 0,\n width: this.allGridWidth,\n height: this.allGridHeight\n });\n bgGroup.name = 'grid-cell-background';\n\n this.cellBackgroundRectsGroup = bgGroup;\n this.group.appendChild(bgGroup);\n\n const rowCount = this.rowCount;\n // 取第一层时间刻度(reverseSortedTimelineScales[0])\n const scale = this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0];\n const timelineDates = scale?.timelineDates ?? [];\n const colCount = timelineDates.length;\n const timelineColWidth: number = this._scene._gantt.parsedOptions.timelineColWidth;\n let y = 0;\n\n for (let r = 0; r < rowCount; r++) {\n const rowHeight: number = this._scene._gantt.getRowHeightByIndex(r);\n\n let x = 0;\n\n for (let c = 0; c < colCount; c++) {\n const cellStart: Date | undefined = timelineDates[c]?.startDate;\n const cellEnd: Date | undefined = timelineDates[c]?.endDate;\n\n // 没有时间范围就跳过\n if (!cellStart || !cellEnd) {\n x += timelineColWidth;\n continue;\n }\n // 计算当前单元格的背景配置结果\n const result =\n typeof cellBackgroundColor === 'function'\n ? cellBackgroundColor({\n rowIndex: r,\n colIndex: c,\n date: cellStart,\n ganttInstance: this._scene._gantt\n })\n : cellBackgroundColor[(r + c) % cellBackgroundColor.length];\n // 没结果就跳过\n if (!result) {\n x += timelineColWidth;\n continue;\n }\n\n // 统一转成数组处理:要么 [string],要么 segments[]\n const resultArray = Array.isArray(result) ? result : [result];\n\n // 情况1:只有一个 string,整格纯色\n if (resultArray.length === 1 && typeof resultArray[0] === 'string') {\n const rect = createRect({\n pickable: false,\n fill: resultArray[0],\n x,\n y,\n width: timelineColWidth,\n height: rowHeight\n });\n\n bgGroup.appendChild(rect);\n x += timelineColWidth;\n continue;\n }\n\n // 情况2:分段着色(按时间切片映射到像素宽度)\n const cs = cellStart.getTime();\n const ce = cellEnd.getTime();\n const total = ce - cs;\n\n for (const seg of resultArray) {\n if (!seg) {\n continue;\n }\n\n const { startTime, endTime, color } = seg;\n if (!startTime || !endTime || !color) {\n continue;\n }\n\n const ss = startTime.getTime();\n const se = endTime.getTime();\n\n // 完全不相交就跳过\n if (se <= cs || ss >= ce) {\n continue;\n }\n\n // 将时间段裁剪到 [cs, ce],映射到 [x, x+timelineColWidth]\n const startOffset = (Math.max(ss, cs) - cs) / total;\n const pixelStartX = x + startOffset * timelineColWidth;\n\n const endOffset = (Math.min(se, ce) - cs) / total;\n const pixelWidth = (endOffset - startOffset) * timelineColWidth;\n\n const rect = createRect({\n pickable: false,\n fill: color,\n x: pixelStartX,\n y,\n width: pixelWidth,\n height: rowHeight\n });\n\n bgGroup.appendChild(rect);\n }\n\n x += timelineColWidth;\n }\n\n y += rowHeight;\n }\n }\n /** 重新创建网格线场景树结点 */\n refresh() {\n this.width = this._scene.ganttGroup.attribute.width;\n this.height = this._scene.ganttGroup.attribute.height - this._scene.timelineHeader.group.attribute.height;\n this.group.setAttributes({\n width: this.width,\n height: this.height,\n y: this._scene._gantt.getAllHeaderRowsHeight()\n });\n this.rowCount = this._scene._gantt.itemCount;\n this.allGridWidth = this._scene._gantt.getAllDateColsWidth();\n this.allGridHeight = this._scene._gantt.getAllTaskBarsHeight();\n this.group.removeAllChild();\n // this.verticalLineGroup?.parent.removeChild(this.verticalLineGroup);\n // this.horizontalLineGroup?.parent.removeChild(this.horizontalLineGroup);\n // this.verticalBackgroundRectsGroup?.parent.removeChild(this.verticalBackgroundRectsGroup);\n // this.horizontalBackgroundRectsGroup?.parent.removeChild(this.horizontalBackgroundRectsGroup);\n this.createVerticalBackgroundRects();\n this.createHorizontalBackgroundRects();\n this.createVerticalLines();\n this.createHorizontalLines();\n this.createTimeLineHeaderBottomLine();\n this.createCellBackgroundRects();\n }\n setX(x: number) {\n this.verticalLineGroup?.setAttribute('x', x);\n this.horizontalLineGroup?.setAttribute('x', x);\n this.verticalBackgroundRectsGroup?.setAttribute('x', x);\n this.horizontalBackgroundRectsGroup?.setAttribute('x', x);\n this.cellBackgroundRectsGroup?.setAttribute('x', x);\n }\n setY(y: number) {\n this.verticalLineGroup?.setAttribute('y', y);\n this.horizontalLineGroup?.setAttribute('y', y);\n this.verticalBackgroundRectsGroup?.setAttribute('y', y);\n this.horizontalBackgroundRectsGroup?.setAttribute('y', y);\n this.cellBackgroundRectsGroup?.setAttribute('y', y);\n }\n resize() {\n this.width = this._scene.ganttGroup.attribute.width;\n this.height = this._scene.ganttGroup.attribute.height - this._scene.timelineHeader.group.attribute.height;\n this.group.setAttribute('width', this.width);\n this.group.setAttribute('height', this.height);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/scenegraph/grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI5E,MAAM,OAAO,IAAI;IAqBf,YAAY,KAAiB;;QAC3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;QAC9F,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACzD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;YACrB,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,MAAA,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,0CAAE,eAAe;SACvD,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,gBAAgB,CAAC;QACnC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACvC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,8BAA8B,EAAE,CAAC;QACtC,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACnC,CAAC;IAED,8BAA8B;;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAEjD,MAAM,wBAAwB,GAC5B,MAAA,MAAA,OAAO,CAAC,mBAAmB,0CAAE,SAAS,mCAAI,MAAA,OAAO,CAAC,iCAAiC,0CAAE,SAAS,CAAC;QACjG,MAAM,WAAW,GAAG,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,wBAAwB,GAAG,CAAC,CAAC;QAC7F,MAAM,IAAI,GAAG,UAAU,CAAC;YACtB,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,MAAA,MAAA,OAAO,CAAC,mBAAmB,0CAAE,SAAS,mCAAI,MAAA,OAAO,CAAC,iCAAiC,0CAAE,SAAS;YACtG,SAAS,EAAE,wBAAwB,GAAG,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,QAAQ,EAAE,MAAA,MAAA,OAAO,CAAC,mBAAmB,0CAAE,QAAQ,mCAAI,MAAA,OAAO,CAAC,iCAAiC,0CAAE,QAAQ;YACtG,MAAM,EAAE;gBACN,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE;gBACxB;oBACE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE;oBAC3C,CAAC,EAAE,WAAW;iBACf;aACF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,mBAAmB;;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;QACxD,MAAM,iCAAiC,GACrC,MAAA,SAAS,CAAC,iCAAiC,mCAC3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvE,IAAI,SAAS,CAAC,YAAY,EAAE;YAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,KAAK,CAAC;gBACjC,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,MAAM,EAAE,IAAI,CAAC,aAAa;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,eAAe,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAE/C,MAAM,qBAAqB,GACzB,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,IAAI,CAC/D,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,iCAAiC,CAC1D,mCAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,EAAE,aAAa,EAAE,GAAG,qBAAqB,CAAC;YAEhD,IAAI,OAAO,SAAS,CAAC,YAAY,KAAK,UAAU,EAAE;gBAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,IAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAClD,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBACrC,MAAM,kBAAkB,GAAG,SAAS,CAAC,YAAY,CAAC;wBAChD,KAAK,EAAE,CAAC;wBACR,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;wBACrC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO;wBAC9B,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAClC,CAAC,CAAC;oBACH,MAAM,CAAC,GACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;wBAC/D,CAAC,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE/C,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,kBAAkB,CAAC,SAAS;wBACpC,SAAS,EAAE,kBAAkB,CAAC,SAAS;wBACvC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;wBACrC,MAAM,EAAE;4BACN,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;4BACX,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE;yBAC7B;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC1C;aACF;iBAAM;gBACL,MAAM,kBAAkB,GAAG,SAAS,CAAC,YAAY,CAAC;gBAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,IAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAClD,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBACrC,MAAM,CAAC,GACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;wBAC/D,CAAC,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE/C,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,kBAAkB,CAAC,SAAS;wBACpC,SAAS,EAAE,kBAAkB,CAAC,SAAS;wBACvC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;wBACrC,MAAM,EAAE;4BACN,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;4BACX,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE;yBAC7B;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC1C;aACF;SACF;IACH,CAAC;IACD,qBAAqB;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;QACxD,IAAI,SAAS,CAAC,cAAc,EAAE;YAC5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,KAAK,CAAC;gBACnC,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,MAAM,EAAE,IAAI,CAAC,aAAa;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,iBAAiB,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjD,IAAI,OAAO,SAAS,CAAC,cAAc,KAAK,UAAU,EAAE;gBAClD,IAAI,CAAC,GAAG,GAAG,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1C,MAAM,oBAAoB,GAAG,SAAS,CAAC,cAAc,CAAC;wBACpD,KAAK,EAAE,CAAC;wBACR,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAClC,CAAC,CAAC;oBACH,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;oBAClD,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,oBAAoB,CAAC,SAAS;wBACtC,SAAS,EAAE,oBAAoB,CAAC,SAAS;wBACzC,QAAQ,EAAE,oBAAoB,CAAC,QAAQ;wBACvC,MAAM,EAAE;4BACN,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;4BACX,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE;yBAC5B;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC5C;aACF;iBAAM;gBACL,MAAM,oBAAoB,GAAG,SAAS,CAAC,cAAc,CAAC;gBACtD,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,oBAAoB,CAAC,SAAS,GAAG,CAAC,EAAE;oBACtC,CAAC,IAAI,GAAG,CAAC;iBACV;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1C,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;oBAClD,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,oBAAoB,CAAC,SAAS;wBACtC,SAAS,EAAE,oBAAoB,CAAC,SAAS;wBACzC,QAAQ,EAAE,oBAAoB,CAAC,QAAQ;wBACvC,MAAM,EAAE;4BACN,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;4BACX,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE;yBAC5B;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC5C;aACF;SACF;IACH,CAAC;IAED,6BAA6B;QAC3B,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC;QAC9F,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC;QAC5F,IAAI,uBAAuB,IAAI,sBAAsB,EAAE;YACrD,IAAI,CAAC,4BAA4B,GAAG,IAAI,KAAK,CAAC;gBAC5C,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,MAAM,EAAE,IAAI,CAAC,aAAa;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,4BAA4B,CAAC,IAAI,GAAG,0BAA0B,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAE1D,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;YAEtG,IAAI,uBAAuB,IAAI,sBAAsB,EAAE;gBACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,IAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACnD,IAAI,eAAe,CAAC;oBACpB,IACE,sBAAsB;wBACtB,IAAI,KAAK,KAAK;wBACd,IAAI,KAAK,CAAC;wBACV,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EACxF;wBACA,eAAe,GAAG,sBAAsB,CAAC;qBAC1C;yBAAM,IAAI,OAAO,uBAAuB,KAAK,UAAU,EAAE;wBACxD,eAAe,GAAG,uBAAuB,CAAC;4BACxC,KAAK,EAAE,CAAC;4BACR,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;4BACrC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO;4BAC9B,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;yBAClC,CAAC,CAAC;qBACJ;yBAAM,IAAI,uBAAuB,EAAE;wBAClC,eAAe,GAAG,uBAAuB,CAAC,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;qBAC/E;oBACD,IAAI,eAAe,EAAE;wBACnB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;wBACpD,MAAM,IAAI,GAAG,UAAU,CAAC;4BACtB,QAAQ,EAAE,KAAK;4BACf,IAAI,EAAE,eAAe;4BACrB,CAAC;4BACD,CAAC,EAAE,CAAC;4BACJ,KAAK;4BACL,MAAM,EAAE,IAAI,CAAC,aAAa;yBAC3B,CAAC,CAAC;wBACH,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;qBACrD;iBACF;aACF;SACF;IACH,CAAC;IACD,+BAA+B;QAC7B,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC;QAClG,IAAI,yBAAyB,EAAE;YAC7B,IAAI,CAAC,8BAA8B,GAAG,IAAI,KAAK,CAAC;gBAC9C,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,MAAM,EAAE,IAAI,CAAC,aAAa;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,8BAA8B,CAAC,IAAI,GAAG,4BAA4B,CAAC;YACxE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAE5D,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAI,eAAe,CAAC;gBACpB,IAAI,OAAO,yBAAyB,KAAK,UAAU,EAAE;oBACnD,eAAe,GAAG,yBAAyB,CAAC;wBAC1C,KAAK,EAAE,CAAC;wBACR,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAClC,CAAC,CAAC;iBACJ;qBAAM;oBACL,eAAe,GAAG,yBAAyB,CAAC,CAAC,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;iBACnF;gBAED,MAAM,IAAI,GAAG,UAAU,CAAC;oBACtB,QAAQ,EAAE,KAAK;oBACf,IAAI,EAAE,eAAe;oBACrB,CAAC,EAAE,CAAC;oBACJ,CAAC;oBACD,KAAK,EAAE,IAAI,CAAC,YAAY;oBACxB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;iBAClD,CAAC,CAAC;gBACH,IAAI,CAAC,8BAA8B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACtD,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;aAChD;SACF;IACH,CAAC;IAED,yBAAyB;;QACvB,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAGtF,IAAI,CAAC,mBAAmB,EAAE;YACxB,OAAO;SACR;QAGD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC;YACxB,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;SAC3B,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC;QAEtC,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,aAAa,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,mCAAI,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;QACtC,MAAM,gBAAgB,GAAW,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC;QACnF,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,SAAS,GAAW,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAEpE,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;gBACjC,MAAM,SAAS,GAAqB,MAAA,aAAa,CAAC,CAAC,CAAC,0CAAE,SAAS,CAAC;gBAChE,MAAM,OAAO,GAAqB,MAAA,aAAa,CAAC,CAAC,CAAC,0CAAE,OAAO,CAAC;gBAG5D,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE;oBAC1B,CAAC,IAAI,gBAAgB,CAAC;oBACtB,SAAS;iBACV;gBAED,MAAM,MAAM,GACV,OAAO,mBAAmB,KAAK,UAAU;oBACvC,CAAC,CAAC,mBAAmB,CAAC;wBAClB,QAAQ,EAAE,CAAC;wBACX,QAAQ,EAAE,CAAC;wBACX,IAAI,EAAE,SAAS;wBACf,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAClC,CAAC;oBACJ,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBAEhE,IAAI,CAAC,MAAM,EAAE;oBACX,CAAC,IAAI,gBAAgB,CAAC;oBACtB,SAAS;iBACV;gBAGD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAG9D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBAClE,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;wBACpB,CAAC;wBACD,CAAC;wBACD,KAAK,EAAE,gBAAgB;wBACvB,MAAM,EAAE,SAAS;qBAClB,CAAC,CAAC;oBAEH,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAC1B,CAAC,IAAI,gBAAgB,CAAC;oBACtB,SAAS;iBACV;gBAGD,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;gBAEtB,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;oBAC7B,IAAI,CAAC,GAAG,EAAE;wBACR,SAAS;qBACV;oBAED,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;oBAC1C,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;wBACpC,SAAS;qBACV;oBAED,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;oBAC/B,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;oBAG7B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;wBACxB,SAAS;qBACV;oBAGD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;oBACpD,MAAM,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,gBAAgB,CAAC;oBAEvD,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;oBAClD,MAAM,UAAU,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,gBAAgB,CAAC;oBAEhE,MAAM,IAAI,GAAG,UAAU,CAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,IAAI,EAAE,KAAK;wBACX,CAAC,EAAE,WAAW;wBACd,CAAC;wBACD,KAAK,EAAE,UAAU;wBACjB,MAAM,EAAE,SAAS;qBAClB,CAAC,CAAC;oBAEH,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC3B;gBAED,CAAC,IAAI,gBAAgB,CAAC;aACvB;YAED,CAAC,IAAI,SAAS,CAAC;SAChB;IACH,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;QAC1G,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE;SAC/C,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC7D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAK5B,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACvC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,8BAA8B,EAAE,CAAC;QACtC,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,CAAS;;QACZ,MAAA,IAAI,CAAC,iBAAiB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAA,IAAI,CAAC,mBAAmB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAA,IAAI,CAAC,4BAA4B,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxD,MAAA,IAAI,CAAC,8BAA8B,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAA,IAAI,CAAC,wBAAwB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,CAAS;;QACZ,MAAA,IAAI,CAAC,iBAAiB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAA,IAAI,CAAC,mBAAmB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAA,IAAI,CAAC,4BAA4B,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxD,MAAA,IAAI,CAAC,8BAA8B,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAA,IAAI,CAAC,wBAAwB,0CAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM;QACJ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;QAC1G,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;CACF","file":"grid.js","sourcesContent":["import { Group, createLine, createRect } from '@visactor/vtable/es/vrender';\n\nimport type { Scenegraph } from './scenegraph';\nimport type { IGrid } from '../ts-types';\nexport class Grid {\n // verticalLineSpace: number;\n // horizontalLineSpace: number;\n gridStyle: IGrid;\n scrollLeft: number;\n scrollTop: number;\n x: number;\n y: number;\n width: number;\n height: number;\n rowHeight: number;\n rowCount: number;\n group: Group;\n verticalLineGroup: Group;\n horizontalLineGroup: Group;\n verticalBackgroundRectsGroup: Group;\n horizontalBackgroundRectsGroup: Group;\n cellBackgroundRectsGroup: Group;\n allGridHeight: number;\n allGridWidth: number;\n _scene: Scenegraph;\n constructor(scene: Scenegraph) {\n this._scene = scene;\n\n this.scrollLeft = 0;\n this.scrollTop = 0;\n this.x = 0;\n this.y = scene._gantt.getAllHeaderRowsHeight();\n this.width = scene.ganttGroup.attribute.width;\n this.height = scene.ganttGroup.attribute.height - scene.timelineHeader.group.attribute.height;\n this.rowHeight = scene._gantt.parsedOptions.rowHeight;\n this.rowCount = scene._gantt.itemCount;\n this.allGridWidth = scene._gantt.getAllDateColsWidth();\n this.allGridHeight = scene._gantt.getAllTaskBarsHeight();\n this.group = new Group({\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n clip: true,\n fill: scene._gantt.parsedOptions.grid?.backgroundColor\n });\n this.group.name = 'grid-container';\n scene.ganttGroup.addChild(this.group);\n this.createVerticalBackgroundRects();\n this.createHorizontalBackgroundRects();\n this.createVerticalLines();\n this.createHorizontalLines();\n this.createTimeLineHeaderBottomLine();\n this.createCellBackgroundRects();\n }\n\n createTimeLineHeaderBottomLine() {\n const options = this._scene._gantt.parsedOptions;\n //补充timelineHeader中不好绘制的底部的边线\n const horizontalSplitLineWidth =\n options.horizontalSplitLine?.lineWidth ?? options.timelineHeaderHorizontalLineStyle?.lineWidth;\n const bottomLineY = (horizontalSplitLineWidth & 1 ? -0.5 : 0) + horizontalSplitLineWidth / 2; // 原来是(horizontalSplitLineWidth & 1 ? 0.5 : 0) 这里改成-0.5为了和左侧表格的水平分割线对齐\n const line = createLine({\n pickable: false,\n stroke: options.horizontalSplitLine?.lineColor ?? options.timelineHeaderHorizontalLineStyle?.lineColor,\n lineWidth: horizontalSplitLineWidth + (horizontalSplitLineWidth & 1 ? 1 : 0), // 加上后面这个1是为了和左侧表格的水平分割线对齐\n lineDash: options.horizontalSplitLine?.lineDash ?? options.timelineHeaderHorizontalLineStyle?.lineDash,\n points: [\n { x: 0, y: bottomLineY },\n {\n x: this._scene._gantt.getAllDateColsWidth(),\n y: bottomLineY\n }\n ]\n });\n line.name = 'timeLine-header-bottom-line';\n this.group.addChild(line);\n }\n\n createVerticalLines() {\n const gridStyle = this._scene._gantt.parsedOptions.grid;\n const verticalLineDependenceOnTimeScale =\n gridStyle.verticalLineDependenceOnTimeScale ??\n this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0].unit;\n\n if (gridStyle.verticalLine) {\n this.verticalLineGroup = new Group({\n x: 0,\n y: 0,\n width: this.allGridWidth,\n height: this.allGridHeight\n });\n this.verticalLineGroup.name = 'grid-vertical';\n this.group.appendChild(this.verticalLineGroup);\n\n const dependenceOnTimeScale =\n this._scene._gantt.parsedOptions.reverseSortedTimelineScales.find(\n scale => scale.unit === verticalLineDependenceOnTimeScale\n ) ?? this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0];\n const { timelineDates } = dependenceOnTimeScale;\n\n if (typeof gridStyle.verticalLine === 'function') {\n for (let i = 0; i < timelineDates?.length - 1; i++) {\n const { endDate } = timelineDates[i];\n const verticalLine_style = gridStyle.verticalLine({\n index: i,\n dateIndex: timelineDates[i].dateIndex,\n date: timelineDates[i].endDate,\n ganttInstance: this._scene._gantt\n });\n const x =\n Math.ceil(this._scene._gantt.getXByTime(endDate.getTime() + 1)) +\n (verticalLine_style.lineWidth & 1 ? 0.5 : 0);\n // const x = Math.ceil(timelineColWidth * (i + 1)) + (verticalLine_style.lineWidth & 1 ? 0.5 : 0);\n const line = createLine({\n pickable: false,\n stroke: verticalLine_style.lineColor,\n lineWidth: verticalLine_style.lineWidth,\n lineDash: verticalLine_style.lineDash,\n points: [\n { x, y: 0 },\n { x, y: this.allGridHeight }\n ]\n });\n this.verticalLineGroup.appendChild(line);\n }\n } else {\n const verticalLine_style = gridStyle.verticalLine;\n for (let i = 0; i < timelineDates?.length - 1; i++) {\n const { endDate } = timelineDates[i];\n const x =\n Math.ceil(this._scene._gantt.getXByTime(endDate.getTime() + 1)) +\n (verticalLine_style.lineWidth & 1 ? 0.5 : 0);\n // const x = Math.ceil(timelineColWidth * (i + 1)) + (verticalLine_style.lineWidth & 1 ? 0.5 : 0);\n const line = createLine({\n pickable: false,\n stroke: verticalLine_style.lineColor,\n lineWidth: verticalLine_style.lineWidth,\n lineDash: verticalLine_style.lineDash,\n points: [\n { x, y: 0 },\n { x, y: this.allGridHeight }\n ]\n });\n this.verticalLineGroup.appendChild(line);\n }\n }\n }\n }\n createHorizontalLines() {\n const gridStyle = this._scene._gantt.parsedOptions.grid;\n if (gridStyle.horizontalLine) {\n this.horizontalLineGroup = new Group({\n x: 0,\n y: 0,\n width: this.allGridWidth,\n height: this.allGridHeight\n });\n this.horizontalLineGroup.name = 'grid-horizontal';\n this.group.appendChild(this.horizontalLineGroup);\n if (typeof gridStyle.horizontalLine === 'function') {\n let y = 0.5; //确保大多数情况 LineWidth为1时是准确的\n for (let i = 0; i < this.rowCount - 1; i++) {\n const horizontalLine_style = gridStyle.horizontalLine({\n index: i,\n ganttInstance: this._scene._gantt\n });\n y = y + this._scene._gantt.getRowHeightByIndex(i); // Math.floor(this.rowHeight);\n const line = createLine({\n pickable: false,\n stroke: horizontalLine_style.lineColor,\n lineWidth: horizontalLine_style.lineWidth,\n lineDash: horizontalLine_style.lineDash,\n points: [\n { x: 0, y },\n { x: this.allGridWidth, y }\n ]\n });\n this.horizontalLineGroup.appendChild(line);\n }\n } else {\n const horizontalLine_style = gridStyle.horizontalLine;\n let y = 0;\n if (horizontalLine_style.lineWidth & 1) {\n y += 0.5;\n }\n for (let i = 0; i < this.rowCount - 1; i++) {\n y = y + this._scene._gantt.getRowHeightByIndex(i); // Math.floor(this.rowHeight);\n const line = createLine({\n pickable: false,\n stroke: horizontalLine_style.lineColor,\n lineWidth: horizontalLine_style.lineWidth,\n lineDash: horizontalLine_style.lineDash,\n points: [\n { x: 0, y },\n { x: this.allGridWidth, y }\n ]\n });\n this.horizontalLineGroup.appendChild(line);\n }\n }\n }\n }\n\n createVerticalBackgroundRects() {\n const verticalBackgroundColor = this._scene._gantt.parsedOptions.grid.verticalBackgroundColor;\n const weekendBackgroundColor = this._scene._gantt.parsedOptions.grid.weekendBackgroundColor;\n if (verticalBackgroundColor || weekendBackgroundColor) {\n this.verticalBackgroundRectsGroup = new Group({\n x: 0,\n y: 0,\n width: this.allGridWidth,\n height: this.allGridHeight\n });\n this.verticalBackgroundRectsGroup.name = 'grid-vertical-background';\n this.group.appendChild(this.verticalBackgroundRectsGroup);\n\n const { timelineDates, unit, step } = this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0];\n\n if (verticalBackgroundColor || weekendBackgroundColor) {\n for (let i = 0; i <= timelineDates?.length - 1; i++) {\n let backgroundColor;\n if (\n weekendBackgroundColor &&\n unit === 'day' &&\n step === 1 &&\n (timelineDates[i].startDate.getDay() === 0 || timelineDates[i].startDate.getDay() === 6)\n ) {\n backgroundColor = weekendBackgroundColor;\n } else if (typeof verticalBackgroundColor === 'function') {\n backgroundColor = verticalBackgroundColor({\n index: i,\n dateIndex: timelineDates[i].dateIndex,\n date: timelineDates[i].endDate,\n ganttInstance: this._scene._gantt\n });\n } else if (verticalBackgroundColor) {\n backgroundColor = verticalBackgroundColor[i % verticalBackgroundColor.length];\n }\n if (backgroundColor) {\n const x = i >= 1 ? Math.ceil(this._scene._gantt.getDateColsWidth(0, i - 1)) : 0;\n const width = this._scene._gantt.getDateColWidth(i);\n const rect = createRect({\n pickable: false,\n fill: backgroundColor,\n x,\n y: 0,\n width,\n height: this.allGridHeight\n });\n this.verticalBackgroundRectsGroup.appendChild(rect);\n }\n }\n }\n }\n }\n createHorizontalBackgroundRects() {\n const horizontalBackgroundColor = this._scene._gantt.parsedOptions.grid.horizontalBackgroundColor;\n if (horizontalBackgroundColor) {\n this.horizontalBackgroundRectsGroup = new Group({\n x: 0,\n y: 0,\n width: this.allGridWidth,\n height: this.allGridHeight\n });\n this.horizontalBackgroundRectsGroup.name = 'grid-horizontal-background';\n this.group.appendChild(this.horizontalBackgroundRectsGroup);\n\n let y = 0;\n for (let i = 0; i <= this.rowCount - 1; i++) {\n let backgroundColor;\n if (typeof horizontalBackgroundColor === 'function') {\n backgroundColor = horizontalBackgroundColor({\n index: i,\n ganttInstance: this._scene._gantt\n });\n } else {\n backgroundColor = horizontalBackgroundColor[i % horizontalBackgroundColor.length];\n }\n\n const rect = createRect({\n pickable: false,\n fill: backgroundColor,\n x: 0,\n y,\n width: this.allGridWidth,\n height: this._scene._gantt.getRowHeightByIndex(i)\n });\n this.horizontalBackgroundRectsGroup.appendChild(rect);\n y += this._scene._gantt.getRowHeightByIndex(i);\n }\n }\n }\n\n createCellBackgroundRects() {\n const cellBackgroundColor = this._scene._gantt.parsedOptions.grid.cellBackgroundColor;\n\n // 没配置就不画\n if (!cellBackgroundColor) {\n return;\n }\n\n // 建一个 group 专门放背景 rect\n const bgGroup = new Group({\n x: 0,\n y: 0,\n width: this.allGridWidth,\n height: this.allGridHeight\n });\n bgGroup.name = 'grid-cell-background';\n\n this.cellBackgroundRectsGroup = bgGroup;\n this.group.appendChild(bgGroup);\n\n const rowCount = this.rowCount;\n // 取第一层时间刻度(reverseSortedTimelineScales[0])\n const scale = this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0];\n const timelineDates = scale?.timelineDates ?? [];\n const colCount = timelineDates.length;\n const timelineColWidth: number = this._scene._gantt.parsedOptions.timelineColWidth;\n let y = 0;\n\n for (let r = 0; r < rowCount; r++) {\n const rowHeight: number = this._scene._gantt.getRowHeightByIndex(r);\n\n let x = 0;\n\n for (let c = 0; c < colCount; c++) {\n const cellStart: Date | undefined = timelineDates[c]?.startDate;\n const cellEnd: Date | undefined = timelineDates[c]?.endDate;\n\n // 没有时间范围就跳过\n if (!cellStart || !cellEnd) {\n x += timelineColWidth;\n continue;\n }\n // 计算当前单元格的背景配置结果\n const result =\n typeof cellBackgroundColor === 'function'\n ? cellBackgroundColor({\n rowIndex: r,\n colIndex: c,\n date: cellStart,\n ganttInstance: this._scene._gantt\n })\n : cellBackgroundColor[(r + c) % cellBackgroundColor.length];\n // 没结果就跳过\n if (!result) {\n x += timelineColWidth;\n continue;\n }\n\n // 统一转成数组处理:要么 [string],要么 segments[]\n const resultArray = Array.isArray(result) ? result : [result];\n\n // 情况1:只有一个 string,整格纯色\n if (resultArray.length === 1 && typeof resultArray[0] === 'string') {\n const rect = createRect({\n pickable: false,\n fill: resultArray[0],\n x,\n y,\n width: timelineColWidth,\n height: rowHeight\n });\n\n bgGroup.appendChild(rect);\n x += timelineColWidth;\n continue;\n }\n\n // 情况2:分段着色(按时间切片映射到像素宽度)\n const cs = cellStart.getTime();\n const ce = cellEnd.getTime();\n const total = ce - cs;\n\n for (const seg of resultArray) {\n if (!seg) {\n continue;\n }\n\n const { startTime, endTime, color } = seg;\n if (!startTime || !endTime || !color) {\n continue;\n }\n\n const ss = startTime.getTime();\n const se = endTime.getTime();\n\n // 完全不相交就跳过\n if (se <= cs || ss >= ce) {\n continue;\n }\n\n // 将时间段裁剪到 [cs, ce],映射到 [x, x+timelineColWidth]\n const startOffset = (Math.max(ss, cs) - cs) / total;\n const pixelStartX = x + startOffset * timelineColWidth;\n\n const endOffset = (Math.min(se, ce) - cs) / total;\n const pixelWidth = (endOffset - startOffset) * timelineColWidth;\n\n const rect = createRect({\n pickable: false,\n fill: color,\n x: pixelStartX,\n y,\n width: pixelWidth,\n height: rowHeight\n });\n\n bgGroup.appendChild(rect);\n }\n\n x += timelineColWidth;\n }\n\n y += rowHeight;\n }\n }\n /** 重新创建网格线场景树结点 */\n refresh() {\n this.width = this._scene.ganttGroup.attribute.width;\n this.height = this._scene.ganttGroup.attribute.height - this._scene.timelineHeader.group.attribute.height;\n this.group.setAttributes({\n width: this.width,\n height: this.height,\n y: this._scene._gantt.getAllHeaderRowsHeight()\n });\n this.rowCount = this._scene._gantt.itemCount;\n this.allGridWidth = this._scene._gantt.getAllDateColsWidth();\n this.allGridHeight = this._scene._gantt.getAllTaskBarsHeight();\n this.group.removeAllChild();\n // this.verticalLineGroup?.parent.removeChild(this.verticalLineGroup);\n // this.horizontalLineGroup?.parent.removeChild(this.horizontalLineGroup);\n // this.verticalBackgroundRectsGroup?.parent.removeChild(this.verticalBackgroundRectsGroup);\n // this.horizontalBackgroundRectsGroup?.parent.removeChild(this.horizontalBackgroundRectsGroup);\n this.createVerticalBackgroundRects();\n this.createHorizontalBackgroundRects();\n this.createVerticalLines();\n this.createHorizontalLines();\n this.createTimeLineHeaderBottomLine();\n this.createCellBackgroundRects();\n }\n setX(x: number) {\n this.verticalLineGroup?.setAttribute('x', x);\n this.horizontalLineGroup?.setAttribute('x', x);\n this.verticalBackgroundRectsGroup?.setAttribute('x', x);\n this.horizontalBackgroundRectsGroup?.setAttribute('x', x);\n this.cellBackgroundRectsGroup?.setAttribute('x', x);\n }\n setY(y: number) {\n this.verticalLineGroup?.setAttribute('y', y);\n this.horizontalLineGroup?.setAttribute('y', y);\n this.verticalBackgroundRectsGroup?.setAttribute('y', y);\n this.horizontalBackgroundRectsGroup?.setAttribute('y', y);\n this.cellBackgroundRectsGroup?.setAttribute('y', y);\n }\n resize() {\n this.width = this._scene.ganttGroup.attribute.width;\n this.height = this._scene.ganttGroup.attribute.height - this._scene.timelineHeader.group.attribute.height;\n this.group.setAttribute('width', this.width);\n this.group.setAttribute('height', this.height);\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { computeCountToTimeScale, createDateAtMidnight } from "../tools/util";
1
+ import { createDateAtMidnight } from "../tools/util";
2
2
 
3
3
  import { Group, createLine, Text } from "@visactor/vtable/es/vrender";
4
4
 
@@ -30,15 +30,14 @@ export class MarkLine {
30
30
  height: height
31
31
  }), this.markLIneContainer.setAttribute("width", this._scene._gantt.getAllDateColsWidth()),
32
32
  this.markLIneContainer.setAttribute("height", height);
33
- const markLine = this._scene._gantt.parsedOptions.markLine, minDate = this._scene._gantt.parsedOptions.minDate;
34
- minDate && markLine.forEach((line => {
35
- const style = line.style, contentStyle = line.contentStyle || {}, date = this._scene._gantt.parsedOptions.timeScaleIncludeHour ? createDateAtMidnight(line.date) : createDateAtMidnight(line.date, !0), {unit: unit, step: step} = this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0], unitCount = computeCountToTimeScale(date, minDate, unit, step);
36
- let positionOffset = 0;
37
- if ("right" === line.position) positionOffset = 1; else if ("middle" === line.position) positionOffset = .5; else if ("date" === line.position) {
38
- const date = createDateAtMidnight(line.date), unitCount = computeCountToTimeScale(date, minDate, unit, step);
39
- positionOffset = unitCount - Math.floor(unitCount);
40
- }
41
- const dateX = this._scene._gantt.parsedOptions.timelineColWidth * (Math.floor(unitCount) + positionOffset), markLineGroup = new Group({
33
+ const markLine = this._scene._gantt.parsedOptions.markLine;
34
+ this._scene._gantt.parsedOptions.minDate && markLine.forEach((line => {
35
+ const style = line.style, contentStyle = line.contentStyle || {}, dateTime = (this._scene._gantt.parsedOptions.timeScaleIncludeHour ? createDateAtMidnight(line.date) : createDateAtMidnight(line.date, !0)).getTime();
36
+ if (dateTime < this._scene._gantt.parsedOptions._minDateTime || dateTime > this._scene._gantt.parsedOptions._maxDateTime) return;
37
+ const cellIndex = this._scene._gantt.getDateIndexByTime(dateTime), cellStartX = cellIndex >= 1 ? this._scene._gantt.getDateColsWidth(0, cellIndex - 1) : 0, cellWidth = this._scene._gantt.getDateColWidth(cellIndex);
38
+ let dateX = cellStartX;
39
+ "date" === line.position ? dateX = this._scene._gantt.getXByTime(dateTime) : "right" === line.position ? dateX = cellStartX + cellWidth : "middle" === line.position && (dateX = cellStartX + cellWidth / 2);
40
+ const markLineGroup = new Group({
42
41
  pickable: !1,
43
42
  x: dateX - this.markLineContainerWidth / 2,
44
43
  y: 0,
@@ -60,7 +59,7 @@ export class MarkLine {
60
59
  } ]
61
60
  });
62
61
  if (markLineGroup.appendChild(lineObj), line.content) {
63
- const textMaxLineWidth = this._scene._gantt.parsedOptions.timelineColWidth, textContainerHeight = contentStyle.lineHeight || 18, textGroup = new Group({
62
+ const textMaxLineWidth = Math.max(this._scene._gantt.getDateColWidth(cellIndex), 1), textContainerHeight = contentStyle.lineHeight || 18, textGroup = new Group({
64
63
  x: this.markLineContainerWidth / 2,
65
64
  y: 0,
66
65
  cursor: "pointer",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scenegraph/mark-line.ts"],"names":[],"mappings":"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","file":"mark-line.js","sourcesContent":["import { computeCountToTimeScale, createDateAtMidnight } from '../tools/util';\nimport { DayTimes } from '../gantt-helper';\n//import type { IMarkLine } from '../ts-types';\nimport type { Scenegraph } from './scenegraph';\nimport { Group, createLine, Text } from '@visactor/vtable/es/vrender';\n\nexport class MarkLine {\n _scene: Scenegraph;\n group: Group;\n markLIneContainer: Group;\n markLineContainerWidth: number = 20;\n height: number;\n constructor(scene: Scenegraph) {\n this._scene = scene;\n this.height =\n Math.min(scene._gantt.tableNoFrameHeight, scene._gantt.drawHeight) - scene._gantt.getAllHeaderRowsHeight();\n this.group = new Group({\n x: 0,\n y: scene._gantt.getAllHeaderRowsHeight(),\n width: scene._gantt.tableNoFrameWidth,\n height: this.height,\n pickable: false,\n clip: true\n });\n this.group.name = 'mark-line-container';\n scene.ganttGroup.addChild(this.group);\n\n this.markLIneContainer = new Group({\n x: 0,\n y: 0,\n width: this._scene._gantt.getAllDateColsWidth(),\n height: this.height,\n pickable: false,\n clip: true\n });\n this.group.appendChild(this.markLIneContainer);\n this.initMarkLines();\n }\n initMarkLines() {\n //#region 重置markLine容器大小\n const height =\n Math.min(this._scene._gantt.tableNoFrameHeight, this._scene._gantt.drawHeight) -\n this._scene._gantt.getAllHeaderRowsHeight();\n this.group.setAttributes({\n y: this._scene._gantt.getAllHeaderRowsHeight(),\n width: this._scene._gantt.tableNoFrameWidth,\n height: height\n });\n this.markLIneContainer.setAttribute('width', this._scene._gantt.getAllDateColsWidth());\n this.markLIneContainer.setAttribute('height', height);\n //#endregion\n const markLine = this._scene._gantt.parsedOptions.markLine;\n const minDate = this._scene._gantt.parsedOptions.minDate;\n minDate &&\n markLine.forEach(line => {\n const style = line.style;\n const contentStyle = line.contentStyle || {};\n const date = this._scene._gantt.parsedOptions.timeScaleIncludeHour\n ? createDateAtMidnight(line.date)\n : createDateAtMidnight(line.date, true);\n const { unit, step } = this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0];\n const unitCount = computeCountToTimeScale(date, minDate, unit, step);\n let positionOffset = 0;\n if (line.position === 'right') {\n positionOffset = 1;\n } else if (line.position === 'middle') {\n positionOffset = 0.5;\n } else if (line.position === 'date') {\n const date = createDateAtMidnight(line.date);\n const unitCount = computeCountToTimeScale(date, minDate, unit, step);\n const cellIndex = Math.floor(unitCount);\n positionOffset = unitCount - cellIndex;\n }\n const dateX = this._scene._gantt.parsedOptions.timelineColWidth * (Math.floor(unitCount) + positionOffset);\n const markLineGroup = new Group({\n pickable: false,\n x: dateX - this.markLineContainerWidth / 2,\n y: 0,\n width: this.markLineContainerWidth,\n height: this.height\n });\n markLineGroup.name = 'mark-line';\n this.markLIneContainer.appendChild(markLineGroup);\n // 创建整个任务条rect\n const lineObj = createLine({\n pickable: false,\n stroke: style.lineColor,\n lineWidth: style.lineWidth,\n lineDash: style.lineDash,\n points: [\n { x: this.markLineContainerWidth / 2, y: 0 },\n { x: this.markLineContainerWidth / 2, y: this.height }\n ]\n });\n markLineGroup.appendChild(lineObj);\n if (line.content) {\n const textMaxLineWidth = this._scene._gantt.parsedOptions.timelineColWidth;\n const textContainerHeight = contentStyle.lineHeight || 18;\n // 创建内容区\n const textGroup = new Group({\n x: this.markLineContainerWidth / 2,\n y: 0,\n cursor: 'pointer',\n height: textContainerHeight,\n clip: false,\n fill: contentStyle.backgroundColor || style.lineColor,\n display: 'flex',\n cornerRadius: contentStyle.cornerRadius || [0, 2, 2, 0]\n });\n textGroup.name = 'mark-line-content';\n (textGroup as any).data = line;\n markLineGroup.appendChild(textGroup);\n // 创建内容\n const text = new Text({\n maxLineWidth: textMaxLineWidth,\n text: line.content,\n cursor: 'pointer',\n lineHeight: textContainerHeight,\n fontWeight: contentStyle.fontWeight || 'normal',\n fill: contentStyle.color || style.lineColor,\n fontSize: contentStyle.fontSize || 12,\n poptip: {\n position: 'top',\n dx: textMaxLineWidth / 4,\n dy: -textContainerHeight / 4\n }\n } as any);\n textGroup.appendChild(text);\n }\n });\n }\n\n /** 重新场景场景树节点 */\n refresh() {\n this.height =\n Math.min(this._scene._gantt.tableNoFrameHeight, this._scene._gantt.drawHeight) -\n this._scene._gantt.getAllHeaderRowsHeight();\n this.markLIneContainer.removeAllChild();\n this.group.setAttribute('height', this.height);\n this.markLIneContainer.setAttribute('height', this.height);\n this.initMarkLines();\n }\n setX(x: number) {\n this.markLIneContainer.setAttribute('x', x);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/scenegraph/mark-line.ts"],"names":[],"mappings":"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","file":"mark-line.js","sourcesContent":["import { createDateAtMidnight } from '../tools/util';\nimport { DayTimes } from '../gantt-helper';\n//import type { IMarkLine } from '../ts-types';\nimport type { Scenegraph } from './scenegraph';\nimport { Group, createLine, Text } from '@visactor/vtable/es/vrender';\n\nexport class MarkLine {\n _scene: Scenegraph;\n group: Group;\n markLIneContainer: Group;\n markLineContainerWidth: number = 20;\n height: number;\n constructor(scene: Scenegraph) {\n this._scene = scene;\n this.height =\n Math.min(scene._gantt.tableNoFrameHeight, scene._gantt.drawHeight) - scene._gantt.getAllHeaderRowsHeight();\n this.group = new Group({\n x: 0,\n y: scene._gantt.getAllHeaderRowsHeight(),\n width: scene._gantt.tableNoFrameWidth,\n height: this.height,\n pickable: false,\n clip: true\n });\n this.group.name = 'mark-line-container';\n scene.ganttGroup.addChild(this.group);\n\n this.markLIneContainer = new Group({\n x: 0,\n y: 0,\n width: this._scene._gantt.getAllDateColsWidth(),\n height: this.height,\n pickable: false,\n clip: true\n });\n this.group.appendChild(this.markLIneContainer);\n this.initMarkLines();\n }\n initMarkLines() {\n //#region 重置markLine容器大小\n const height =\n Math.min(this._scene._gantt.tableNoFrameHeight, this._scene._gantt.drawHeight) -\n this._scene._gantt.getAllHeaderRowsHeight();\n this.group.setAttributes({\n y: this._scene._gantt.getAllHeaderRowsHeight(),\n width: this._scene._gantt.tableNoFrameWidth,\n height: height\n });\n this.markLIneContainer.setAttribute('width', this._scene._gantt.getAllDateColsWidth());\n this.markLIneContainer.setAttribute('height', height);\n //#endregion\n const markLine = this._scene._gantt.parsedOptions.markLine;\n const minDate = this._scene._gantt.parsedOptions.minDate;\n minDate &&\n markLine.forEach(line => {\n const style = line.style;\n const contentStyle = line.contentStyle || {};\n const date = this._scene._gantt.parsedOptions.timeScaleIncludeHour\n ? createDateAtMidnight(line.date)\n : createDateAtMidnight(line.date, true);\n const dateTime = date.getTime();\n if (\n dateTime < this._scene._gantt.parsedOptions._minDateTime ||\n dateTime > this._scene._gantt.parsedOptions._maxDateTime\n ) {\n return;\n }\n const cellIndex = this._scene._gantt.getDateIndexByTime(dateTime);\n const cellStartX = cellIndex >= 1 ? this._scene._gantt.getDateColsWidth(0, cellIndex - 1) : 0;\n const cellWidth = this._scene._gantt.getDateColWidth(cellIndex);\n let dateX = cellStartX;\n if (line.position === 'date') {\n dateX = this._scene._gantt.getXByTime(dateTime);\n } else if (line.position === 'right') {\n dateX = cellStartX + cellWidth;\n } else if (line.position === 'middle') {\n dateX = cellStartX + cellWidth / 2;\n }\n const markLineGroup = new Group({\n pickable: false,\n x: dateX - this.markLineContainerWidth / 2,\n y: 0,\n width: this.markLineContainerWidth,\n height: this.height\n });\n markLineGroup.name = 'mark-line';\n this.markLIneContainer.appendChild(markLineGroup);\n // 创建整个任务条rect\n const lineObj = createLine({\n pickable: false,\n stroke: style.lineColor,\n lineWidth: style.lineWidth,\n lineDash: style.lineDash,\n points: [\n { x: this.markLineContainerWidth / 2, y: 0 },\n { x: this.markLineContainerWidth / 2, y: this.height }\n ]\n });\n markLineGroup.appendChild(lineObj);\n if (line.content) {\n const textMaxLineWidth = Math.max(this._scene._gantt.getDateColWidth(cellIndex), 1);\n const textContainerHeight = contentStyle.lineHeight || 18;\n // 创建内容区\n const textGroup = new Group({\n x: this.markLineContainerWidth / 2,\n y: 0,\n cursor: 'pointer',\n height: textContainerHeight,\n clip: false,\n fill: contentStyle.backgroundColor || style.lineColor,\n display: 'flex',\n cornerRadius: contentStyle.cornerRadius || [0, 2, 2, 0]\n });\n textGroup.name = 'mark-line-content';\n (textGroup as any).data = line;\n markLineGroup.appendChild(textGroup);\n // 创建内容\n const text = new Text({\n maxLineWidth: textMaxLineWidth,\n text: line.content,\n cursor: 'pointer',\n lineHeight: textContainerHeight,\n fontWeight: contentStyle.fontWeight || 'normal',\n fill: contentStyle.color || style.lineColor,\n fontSize: contentStyle.fontSize || 12,\n poptip: {\n position: 'top',\n dx: textMaxLineWidth / 4,\n dy: -textContainerHeight / 4\n }\n } as any);\n textGroup.appendChild(text);\n }\n });\n }\n\n /** 重新场景场景树节点 */\n refresh() {\n this.height =\n Math.min(this._scene._gantt.tableNoFrameHeight, this._scene._gantt.drawHeight) -\n this._scene._gantt.getAllHeaderRowsHeight();\n this.markLIneContainer.removeAllChild();\n this.group.setAttribute('height', this.height);\n this.markLIneContainer.setAttribute('height', this.height);\n this.initMarkLines();\n }\n setX(x: number) {\n this.markLIneContainer.setAttribute('x', x);\n }\n}\n"]}
@@ -17,15 +17,25 @@ export declare class TaskBar {
17
17
  hoverBarLeftIcon: Image;
18
18
  hoverBarRightIcon: Image;
19
19
  hoverBarProgressHandle: Group;
20
+ locateIconsGroup?: Group;
21
+ currentHoverLocateIcon: Group | null;
20
22
  _scene: Scenegraph;
21
23
  width: number;
22
24
  height: number;
23
25
  selectedBorders: Group[];
24
26
  constructor(scene: Scenegraph);
25
27
  initBars(): void;
26
- initBar(index: number, childIndex?: number | number[], childrenLength?: number): GanttTaskBarNode;
28
+ initBar(index: number, childIndex?: number | number[], childrenLength?: number): {
29
+ barGroupBox: GanttTaskBarNode;
30
+ baselineBar: any;
31
+ };
27
32
  updateTaskBarNode(index: number, sub_task_index?: number): void;
28
33
  initHoverBarIcons(): void;
34
+ initLocateIconsGroup(): void;
35
+ applyLocateIconStyle(icon: Group, hover: boolean): void;
36
+ createLocateIcon(side: 'left' | 'right', target: GanttTaskBarNode): Group;
37
+ setLocateIconHover(icon: Group | null): void;
38
+ updateOffscreenIndicators(): void;
29
39
  setX(x: number): void;
30
40
  setY(y: number): void;
31
41
  refresh(): void;
@@ -1,6 +1,6 @@
1
1
  import { Group, createText, createRect, Image, Circle, Line, Polygon } from "@visactor/vtable/es/vrender";
2
2
 
3
- import { computeCountToTimeScale, parseStringTemplate, toBoxArray } from "../tools/util";
3
+ import { parseStringTemplate, toBoxArray } from "../tools/util";
4
4
 
5
5
  import { isValid } from "@visactor/vutils";
6
6
 
@@ -14,6 +14,8 @@ const TASKBAR_HOVER_ICON = '<svg width="100" height="200" xmlns="http://www.w3.o
14
14
 
15
15
  export const TASKBAR_HOVER_ICON_WIDTH = 10;
16
16
 
17
+ const LOCATE_ICON_SIZE = 22, LOCATE_ICON_PADDING = 4, LOCATE_ICON_BG = "#f2f3f5", LOCATE_ICON_BG_HOVER = "#4080ff", LOCATE_ICON_ARROW = "#4e5969", LOCATE_ICON_ARROW_HOVER = "#ffffff";
18
+
17
19
  export class TaskBar {
18
20
  formatMilestoneText(text, record) {
19
21
  if (!text) return "";
@@ -62,7 +64,7 @@ export class TaskBar {
62
64
  pickable: !1,
63
65
  clip: !0
64
66
  }), this.group.name = "task-bar-container", scene.ganttGroup.addChild(this.group),
65
- this.initBars(), this.initHoverBarIcons();
67
+ this.initBars(), this.initHoverBarIcons(), scene._gantt.parsedOptions.taskBarLocateIcon && this.initLocateIconsGroup();
66
68
  }
67
69
  initBars() {
68
70
  var _a, _b, _c;
@@ -75,8 +77,8 @@ export class TaskBar {
75
77
  clip: !0
76
78
  }), this.group.appendChild(this.barContainer);
77
79
  for (let i = 0; i < this._scene._gantt.itemCount; i++) if (this._scene._gantt.parsedOptions.tasksShowMode !== TasksShowMode.Sub_Tasks_Inline && this._scene._gantt.parsedOptions.tasksShowMode !== TasksShowMode.Sub_Tasks_Separate && this._scene._gantt.parsedOptions.tasksShowMode !== TasksShowMode.Sub_Tasks_Arrange && this._scene._gantt.parsedOptions.tasksShowMode !== TasksShowMode.Sub_Tasks_Compact) if (this._scene._gantt.parsedOptions.tasksShowMode !== TasksShowMode.Project_Sub_Tasks_Inline) {
78
- const barGroup = this.initBar(i);
79
- barGroup && this.barContainer.appendChild(barGroup);
80
+ const {barGroupBox: barGroupBox, baselineBar: baselineBar} = this.initBar(i);
81
+ baselineBar && this.barContainer.appendChild(baselineBar), barGroupBox && this.barContainer.appendChild(barGroupBox);
80
82
  } else {
81
83
  const record = this._scene._gantt.getRecordByIndex(i), isExpanded = "expand" === record.hierarchyState;
82
84
  if (record.type === TaskType.PROJECT && (null === (_c = record.children) || void 0 === _c ? void 0 : _c.length) > 0 && !isExpanded) {
@@ -85,42 +87,89 @@ export class TaskBar {
85
87
  if ((null === (_a = record.children) || void 0 === _a ? void 0 : _a.length) > 0) for (let j = 0; j < (null === (_b = record.children) || void 0 === _b ? void 0 : _b.length); j++) {
86
88
  const child_record = record.children[j];
87
89
  if (child_record.type !== TaskType.PROJECT) {
88
- const barGroup = this.initBar(i, [ ...sub_task_indexs, j ], record.children.length);
89
- barGroup && this.barContainer.appendChild(barGroup);
90
+ const {barGroupBox: barGroupBox, baselineBar: baselineBar} = this.initBar(i, [ ...sub_task_indexs, j ], record.children.length);
91
+ baselineBar && this.barContainer.appendChild(baselineBar), barGroupBox && this.barContainer.appendChild(barGroupBox);
90
92
  } else callInitBar(child_record, [ ...sub_task_indexs, j ]);
91
93
  }
92
94
  };
93
95
  callInitBar(record, sub_task_indexs);
94
96
  } else {
95
- const barGroup = this.initBar(i);
96
- barGroup && this.barContainer.appendChild(barGroup);
97
+ const {barGroupBox: barGroupBox, baselineBar: baselineBar} = this.initBar(i);
98
+ baselineBar && this.barContainer.appendChild(baselineBar), barGroupBox && this.barContainer.appendChild(barGroupBox);
97
99
  }
98
100
  } else {
99
101
  const record = this._scene._gantt.getRecordByIndex(i);
100
102
  if ((null === (_a = record.children) || void 0 === _a ? void 0 : _a.length) > 0) for (let j = 0; j < (null === (_b = record.children) || void 0 === _b ? void 0 : _b.length); j++) {
101
- const barGroup = this.initBar(i, j, record.children.length);
102
- barGroup && this.barContainer.appendChild(barGroup);
103
+ const {barGroupBox: barGroupBox, baselineBar: baselineBar} = this.initBar(i, j, record.children.length);
104
+ baselineBar && this.barContainer.appendChild(baselineBar), barGroupBox && this.barContainer.appendChild(barGroupBox);
103
105
  } else {
104
- const barGroup = this.initBar(i);
105
- barGroup && this.barContainer.appendChild(barGroup);
106
+ const {barGroupBox: barGroupBox, baselineBar: baselineBar} = this.initBar(i);
107
+ baselineBar && this.barContainer.appendChild(baselineBar), barGroupBox && this.barContainer.appendChild(barGroupBox);
106
108
  }
107
109
  }
108
110
  }
109
111
  initBar(index, childIndex, childrenLength) {
110
- var _a, _b, _c, _d, _e;
112
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
111
113
  const taskBarCustomLayout = this._scene._gantt.parsedOptions.taskBarCustomLayout, {startDate: startDate, endDate: endDate, taskDays: taskDays, progress: progress, taskRecord: taskRecord} = this._scene._gantt.getTaskInfoByTaskListIndex(index, childIndex), isMilestone = taskRecord.type === TaskType.MILESTONE;
112
- if (isMilestone && !startDate || !isMilestone && (taskDays <= 0 || !startDate || !endDate || startDate.getTime() > endDate.getTime())) return null;
113
- const {unit: unit, step: step} = this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0];
114
- let taskBarSize = computeCountToTimeScale(endDate, startDate, unit, step, 1) * this._scene._gantt.parsedOptions.timelineColWidth;
114
+ if (isMilestone && !startDate || !isMilestone && (taskDays <= 0 || !startDate || !endDate || startDate.getTime() > endDate.getTime())) return {
115
+ barGroupBox: null,
116
+ baselineBar: null
117
+ };
118
+ let taskBarSize = this._scene._gantt.getXByTime(endDate.getTime() + 1) - this._scene._gantt.getXByTime(startDate.getTime());
115
119
  const taskBarStyle = this._scene._gantt.getTaskBarStyle(index, childIndex), taskbarHeight = taskBarStyle.width;
116
120
  isValid(taskBarStyle.minSize) && (taskBarSize = Math.max(taskBarSize, taskBarStyle.minSize));
117
- const oneTaskHeigth = this._scene._gantt.parsedOptions.rowHeight, milestoneTaskBarHeight = this._scene._gantt.parsedOptions.taskBarMilestoneStyle.width, x = computeCountToTimeScale(startDate, this._scene._gantt.parsedOptions.minDate, unit, step) * this._scene._gantt.parsedOptions.timelineColWidth - (isMilestone ? milestoneTaskBarHeight / 2 : 0), y = this._scene._gantt.getRowsHeightByIndex(0, index - 1) + (this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate ? (null !== (_a = childIndex) && void 0 !== _a ? _a : 0) * oneTaskHeigth : this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange || this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact ? taskRecord.vtable_gantt_showIndex * oneTaskHeigth : 0) + (oneTaskHeigth - (isMilestone ? milestoneTaskBarHeight : taskbarHeight)) / 2, barGroupBox = new GanttTaskBarNode({
121
+ const oneTaskHeigth = this._scene._gantt.parsedOptions.rowHeight, milestoneTaskBarHeight = this._scene._gantt.parsedOptions.taskBarMilestoneStyle.width, x = this._scene._gantt.getXByTime(startDate.getTime()) - (isMilestone ? milestoneTaskBarHeight / 2 : 0);
122
+ let y = this._scene._gantt.getRowsHeightByIndex(0, index - 1) + (this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate ? (null !== (_a = childIndex) && void 0 !== _a ? _a : 0) * oneTaskHeigth : this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange || this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact ? taskRecord.vtable_gantt_showIndex * oneTaskHeigth : 0);
123
+ const baselineInfo = this._scene._gantt.getBaselineInfoByTaskListIndex(index, childIndex), hasBaseline = baselineInfo.baselineStartDate && baselineInfo.baselineEndDate && baselineInfo.baselineDays > 0, baselinePosition = this._scene._gantt.parsedOptions.baselinePosition;
124
+ let baselineBar = null, taskBarYOffset = 0;
125
+ if (hasBaseline && !isMilestone) {
126
+ const baselineStyle = this._scene._gantt.getBaselineStyle(index, childIndex), baselineX = this._scene._gantt.getXByTime(baselineInfo.baselineStartDate.getTime()), baselineWidth = this._scene._gantt.getXByTime(baselineInfo.baselineEndDate.getTime() + 1) - this._scene._gantt.getXByTime(baselineInfo.baselineStartDate.getTime());
127
+ let baselineY;
128
+ const taskBarPaddingTop = null !== (_b = taskBarStyle.paddingTop) && void 0 !== _b ? _b : void 0, baselinePaddingTop = null !== (_c = baselineStyle.paddingTop) && void 0 !== _c ? _c : void 0;
129
+ if ("overlap" === baselinePosition) baselineY = void 0 !== taskBarPaddingTop ? y + taskBarPaddingTop : y + (oneTaskHeigth - baselineStyle.width) / 2; else if ("top" === baselinePosition) {
130
+ const gap = 4;
131
+ if (void 0 !== baselinePaddingTop && void 0 !== taskBarPaddingTop) baselineY = y + baselinePaddingTop,
132
+ taskBarYOffset = taskBarPaddingTop; else if (void 0 !== baselinePaddingTop) baselineY = y + baselinePaddingTop,
133
+ taskBarYOffset = baselinePaddingTop + baselineStyle.width + gap; else if (void 0 !== taskBarPaddingTop) {
134
+ baselineY = y + (oneTaskHeigth - (baselineStyle.width + gap + taskbarHeight)) / 2,
135
+ taskBarYOffset = taskBarPaddingTop;
136
+ } else {
137
+ const startY = (oneTaskHeigth - (baselineStyle.width + gap + taskbarHeight)) / 2;
138
+ baselineY = y + startY, taskBarYOffset = startY + baselineStyle.width + gap;
139
+ }
140
+ } else {
141
+ const gap = 4;
142
+ if (void 0 !== taskBarPaddingTop && void 0 !== baselinePaddingTop) taskBarYOffset = taskBarPaddingTop,
143
+ baselineY = y + baselinePaddingTop; else if (void 0 !== taskBarPaddingTop) taskBarYOffset = taskBarPaddingTop,
144
+ baselineY = y + taskBarPaddingTop + taskbarHeight + gap; else if (void 0 !== baselinePaddingTop) {
145
+ taskBarYOffset = (oneTaskHeigth - (taskbarHeight + gap + baselineStyle.width)) / 2,
146
+ baselineY = y + baselinePaddingTop;
147
+ } else {
148
+ const startY = (oneTaskHeigth - (taskbarHeight + gap + baselineStyle.width)) / 2;
149
+ taskBarYOffset = startY, baselineY = y + startY + taskbarHeight + gap;
150
+ }
151
+ }
152
+ baselineBar = createRect({
153
+ x: baselineX,
154
+ y: baselineY,
155
+ width: Math.max(baselineWidth, baselineStyle.minSize || 0),
156
+ height: baselineStyle.width,
157
+ fill: baselineStyle.barColor,
158
+ cornerRadius: baselineStyle.cornerRadius,
159
+ lineWidth: 2 * (null !== (_d = baselineStyle.borderLineWidth) && void 0 !== _d ? _d : baselineStyle.borderWidth),
160
+ stroke: baselineStyle.borderColor,
161
+ pickable: !1
162
+ }), baselineBar.name = "baseline-bar";
163
+ }
164
+ const taskBarPaddingTop = null !== (_e = taskBarStyle.paddingTop) && void 0 !== _e ? _e : void 0;
165
+ y += hasBaseline && !isMilestone && "overlap" !== baselinePosition ? taskBarYOffset : void 0 !== taskBarPaddingTop ? taskBarPaddingTop : (oneTaskHeigth - (isMilestone ? milestoneTaskBarHeight : taskbarHeight)) / 2 + taskBarYOffset;
166
+ const barGroupBox = new GanttTaskBarNode({
118
167
  x: x,
119
168
  y: y,
120
169
  width: isMilestone ? milestoneTaskBarHeight : taskBarSize,
121
170
  height: isMilestone ? milestoneTaskBarHeight : taskbarHeight,
122
171
  cornerRadius: isMilestone ? this._scene._gantt.parsedOptions.taskBarMilestoneStyle.cornerRadius : taskBarStyle.cornerRadius,
123
- lineWidth: isMilestone ? 2 * this._scene._gantt.parsedOptions.taskBarMilestoneStyle.borderLineWidth : 2 * (null !== (_b = taskBarStyle.borderLineWidth) && void 0 !== _b ? _b : taskBarStyle.borderWidth),
172
+ lineWidth: isMilestone ? 2 * this._scene._gantt.parsedOptions.taskBarMilestoneStyle.borderLineWidth : 2 * (null !== (_f = taskBarStyle.borderLineWidth) && void 0 !== _f ? _f : taskBarStyle.borderWidth),
124
173
  stroke: isMilestone ? this._scene._gantt.parsedOptions.taskBarMilestoneStyle.borderColor : taskBarStyle.borderColor,
125
174
  angle: isMilestone ? .25 * Math.PI : 0,
126
175
  anchor: isMilestone ? [ x + milestoneTaskBarHeight / 2, y + milestoneTaskBarHeight / 2 ] : void 0
@@ -153,8 +202,8 @@ export class TaskBar {
153
202
  ganttInstance: this._scene._gantt
154
203
  });
155
204
  } else customLayoutObj = taskBarCustomLayout;
156
- customLayoutObj && (rootContainer = customLayoutObj.rootContainer, renderDefaultBar = null !== (_c = customLayoutObj.renderDefaultBar) && void 0 !== _c && _c,
157
- renderDefaultText = null !== (_d = customLayoutObj.renderDefaultText) && void 0 !== _d && _d,
205
+ customLayoutObj && (rootContainer = customLayoutObj.rootContainer, renderDefaultBar = null !== (_g = customLayoutObj.renderDefaultBar) && void 0 !== _g && _g,
206
+ renderDefaultText = null !== (_h = customLayoutObj.renderDefaultText) && void 0 !== _h && _h,
158
207
  rootContainer && (rootContainer.name = "task-bar-custom-render"));
159
208
  }
160
209
  if (renderDefaultBar) {
@@ -200,7 +249,7 @@ export class TaskBar {
200
249
  barGroupBox.updateTextPosition();
201
250
  }
202
251
  if (renderDefaultText && "milestone" === taskRecord.type && this._scene._gantt.parsedOptions.taskBarMilestoneStyle.labelText) {
203
- const milestoneStyle = this._scene._gantt.parsedOptions.taskBarMilestoneStyle, textStyle = milestoneStyle.labelTextStyle || {}, pos = this.calculateMilestoneTextPosition(milestoneStyle.textOrient || "right", milestoneStyle.width, null !== (_e = textStyle.padding) && void 0 !== _e ? _e : 4), textContainer = new Group({
252
+ const milestoneStyle = this._scene._gantt.parsedOptions.taskBarMilestoneStyle, textStyle = milestoneStyle.labelTextStyle || {}, pos = this.calculateMilestoneTextPosition(milestoneStyle.textOrient || "right", milestoneStyle.width, null !== (_j = textStyle.padding) && void 0 !== _j ? _j : 4), textContainer = new Group({
204
253
  x: x,
205
254
  y: y,
206
255
  width: milestoneStyle.width,
@@ -221,13 +270,17 @@ export class TaskBar {
221
270
  textContainer.appendChild(milestoneLabel), this.barContainer.appendChild(textContainer),
222
271
  barGroupBox.milestoneTextLabel = milestoneLabel, barGroupBox.milestoneTextContainer = textContainer;
223
272
  }
224
- return barGroupBox;
273
+ return {
274
+ barGroupBox: barGroupBox,
275
+ baselineBar: baselineBar
276
+ };
225
277
  }
226
278
  updateTaskBarNode(index, sub_task_index) {
227
279
  const taskbarGroup = this.getTaskBarNodeByIndex(index, sub_task_index);
228
280
  taskbarGroup && this.barContainer.removeChild(taskbarGroup);
229
- const barGroup = this.initBar(index, sub_task_index);
230
- barGroup && (this.barContainer.insertInto(barGroup, index), barGroup.updateTextPosition());
281
+ const {barGroupBox: barGroupBox, baselineBar: baselineBar} = this.initBar(index, sub_task_index);
282
+ barGroupBox && (this.barContainer.insertInto(barGroupBox, index), barGroupBox.updateTextPosition()),
283
+ baselineBar && this.barContainer.insertBefore(baselineBar, barGroupBox), this.updateOffscreenIndicators();
231
284
  }
232
285
  initHoverBarIcons() {
233
286
  var _a, _b;
@@ -293,26 +346,134 @@ export class TaskBar {
293
346
  progressHandle.appendChild(triangleHandle), progressHandle.name = "task-bar-progress-handle",
294
347
  this.hoverBarProgressHandle = progressHandle, hoverBarGroup.appendChild(progressHandle);
295
348
  }
349
+ initLocateIconsGroup() {
350
+ const locateIconsGroup = new Group({
351
+ x: 0,
352
+ y: 0,
353
+ width: this.width,
354
+ height: this.height,
355
+ clip: !0,
356
+ pickable: !1
357
+ });
358
+ this.locateIconsGroup = locateIconsGroup, locateIconsGroup.name = "task-bar-locate-icons",
359
+ this.group.appendChild(locateIconsGroup);
360
+ }
361
+ applyLocateIconStyle(icon, hover) {
362
+ const background = icon.background, arrow = icon.arrow;
363
+ background && background.setAttribute("fill", hover ? "#4080ff" : "#f2f3f5"), arrow && arrow.setAttribute("fill", hover ? "#ffffff" : "#4e5969");
364
+ }
365
+ createLocateIcon(side, target) {
366
+ const iconGroup = new Group({
367
+ x: 0,
368
+ y: 0,
369
+ width: 22,
370
+ height: 22,
371
+ pickable: !0,
372
+ cursor: "pointer",
373
+ visibleAll: !1
374
+ });
375
+ iconGroup.name = "left" === side ? "task-bar-locate-icon-left" : "task-bar-locate-icon-right",
376
+ iconGroup.attachedToTaskBarNode = target, iconGroup.side = side;
377
+ const background = createRect({
378
+ x: 0,
379
+ y: 0,
380
+ width: 22,
381
+ height: 22,
382
+ cornerRadius: 4,
383
+ fill: "#f2f3f5",
384
+ pickable: !1
385
+ }), arrow = new Polygon("left" === side ? {
386
+ points: [ {
387
+ x: 14,
388
+ y: 5
389
+ }, {
390
+ x: 8,
391
+ y: 11
392
+ }, {
393
+ x: 14,
394
+ y: 17
395
+ } ],
396
+ fill: "#4e5969",
397
+ pickable: !1
398
+ } : {
399
+ points: [ {
400
+ x: 8,
401
+ y: 5
402
+ }, {
403
+ x: 14,
404
+ y: 11
405
+ }, {
406
+ x: 8,
407
+ y: 17
408
+ } ],
409
+ fill: "#4e5969",
410
+ pickable: !1
411
+ });
412
+ return iconGroup.appendChild(background), iconGroup.appendChild(arrow), iconGroup.background = background,
413
+ iconGroup.arrow = arrow, this.applyLocateIconStyle(iconGroup, !1), iconGroup;
414
+ }
415
+ setLocateIconHover(icon) {
416
+ this.currentHoverLocateIcon && this.currentHoverLocateIcon !== icon && this.applyLocateIconStyle(this.currentHoverLocateIcon, !1),
417
+ icon && this.applyLocateIconStyle(icon, !0), this.currentHoverLocateIcon = icon,
418
+ this._scene.updateNextFrame();
419
+ }
420
+ updateOffscreenIndicators() {
421
+ if (!this.locateIconsGroup) return;
422
+ const gantt = this._scene._gantt, scrollLeft = gantt.stateManager.scrollLeft, scrollTop = gantt.stateManager.scrollTop, viewWidth = gantt.tableNoFrameWidth, visibleLeft = scrollLeft, visibleRight = scrollLeft + viewWidth, visibleTop = scrollTop, visibleBottom = scrollTop + this.height;
423
+ let child = this.barContainer.firstChild;
424
+ for (;child; ) {
425
+ if ("task-bar" === child.name) {
426
+ const bar = child, barLeft = bar.attribute.x, barRight = barLeft + bar.attribute.width, barTop = bar.attribute.y;
427
+ let side = null;
428
+ barTop + bar.attribute.height >= visibleTop && barTop <= visibleBottom && (barRight < visibleLeft ? side = "left" : barLeft > visibleRight && (side = "right"));
429
+ const leftIcon = bar.locateLeftIcon, rightIcon = bar.locateRightIcon;
430
+ if (side) {
431
+ let icon = "left" === side ? leftIcon : rightIcon;
432
+ icon ? icon.parent !== this.locateIconsGroup && this.locateIconsGroup.appendChild(icon) : (icon = this.createLocateIcon(side, bar),
433
+ "left" === side ? bar.locateLeftIcon = icon : bar.locateRightIcon = icon, this.locateIconsGroup.appendChild(icon));
434
+ const iconX = "left" === side ? 4 : viewWidth - 22 - 4, iconY = barTop - scrollTop + (bar.attribute.height - 22) / 2;
435
+ icon.setAttributes({
436
+ x: iconX,
437
+ y: iconY,
438
+ visibleAll: !0
439
+ });
440
+ const otherIcon = "left" === side ? rightIcon : leftIcon;
441
+ null == otherIcon || otherIcon.setAttribute("visibleAll", !1), this.currentHoverLocateIcon === otherIcon && this.setLocateIconHover(null);
442
+ } else null == leftIcon || leftIcon.setAttribute("visibleAll", !1), null == rightIcon || rightIcon.setAttribute("visibleAll", !1),
443
+ this.currentHoverLocateIcon !== leftIcon && this.currentHoverLocateIcon !== rightIcon || this.setLocateIconHover(null);
444
+ }
445
+ child = child._next;
446
+ }
447
+ }
296
448
  setX(x) {
297
- this.barContainer.setAttribute("x", x);
449
+ this.barContainer.setAttribute("x", x), this.updateOffscreenIndicators();
298
450
  }
299
451
  setY(y) {
300
- this.barContainer.setAttribute("y", y);
452
+ this.barContainer.setAttribute("y", y), this.updateOffscreenIndicators();
301
453
  }
302
454
  refresh() {
455
+ var _a, _b;
303
456
  this.width = this._scene._gantt.tableNoFrameWidth, this.height = this._scene._gantt.gridHeight,
304
457
  this.group.setAttributes({
305
458
  height: this.height,
306
459
  width: this.width,
307
460
  y: this._scene._gantt.getAllHeaderRowsHeight()
308
- });
461
+ }), null === (_a = this.locateIconsGroup) || void 0 === _a || _a.setAttributes({
462
+ width: this.width,
463
+ height: this.height
464
+ }), null === (_b = this.locateIconsGroup) || void 0 === _b || _b.removeAllChild();
309
465
  const x = this.barContainer.attribute.x, y = this.barContainer.attribute.y;
310
466
  this.barContainer.removeAllChild(), this.group.removeChild(this.barContainer), this.initBars(),
311
- this.setX(x), this.setY(y);
467
+ this.setX(x), this.setY(y), this.updateOffscreenIndicators();
312
468
  }
313
469
  resize() {
470
+ var _a;
314
471
  this.width = this._scene._gantt.tableNoFrameWidth, this.height = this._scene._gantt.gridHeight,
315
- this.group.setAttribute("width", this.width), this.group.setAttribute("height", this.height);
472
+ this.group.setAttribute("width", this.width), this.group.setAttribute("height", this.height),
473
+ null === (_a = this.locateIconsGroup) || void 0 === _a || _a.setAttributes({
474
+ width: this.width,
475
+ height: this.height
476
+ }), this.updateOffscreenIndicators();
316
477
  }
317
478
  showHoverBar(x, y, width, height, target) {
318
479
  var _a, _b, _c, _d, _e;