@visactor/vtable-gantt 1.7.0-alpha.0 → 1.7.0-alpha.2

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 (135) hide show
  1. package/cjs/Gantt.d.ts +2 -0
  2. package/cjs/Gantt.js +23 -17
  3. package/cjs/Gantt.js.map +1 -1
  4. package/cjs/components/Menu.d.ts +1 -0
  5. package/cjs/components/Menu.js +1 -0
  6. package/cjs/components/Menu.js.map +1 -0
  7. package/cjs/components/MenuElementStyle.d.ts +1 -0
  8. package/cjs/components/MenuElementStyle.js +12 -0
  9. package/cjs/components/MenuElementStyle.js.map +1 -0
  10. package/cjs/event/event-manager.js +7 -7
  11. package/cjs/event/event-manager.js.map +1 -1
  12. package/cjs/event/scroll.js.map +1 -1
  13. package/cjs/gantt-helper.d.ts +1 -14
  14. package/cjs/gantt-helper.js +24 -16
  15. package/cjs/gantt-helper.js.map +1 -1
  16. package/cjs/index.d.ts +1 -1
  17. package/cjs/index.js +1 -1
  18. package/cjs/index.js.map +1 -1
  19. package/cjs/scenegraph/frame-border.d.ts +2 -2
  20. package/cjs/scenegraph/frame-border.js +2 -2
  21. package/cjs/scenegraph/frame-border.js.map +1 -1
  22. package/cjs/scenegraph/ganttNode.d.ts +7 -6
  23. package/cjs/scenegraph/ganttNode.js +2 -2
  24. package/cjs/scenegraph/ganttNode.js.map +1 -1
  25. package/cjs/scenegraph/graphic/group-contribution-render.d.ts +5 -4
  26. package/cjs/scenegraph/graphic/group-contribution-render.js +5 -4
  27. package/cjs/scenegraph/graphic/group-contribution-render.js.map +1 -1
  28. package/cjs/scenegraph/graphic/index.d.ts +2 -2
  29. package/cjs/scenegraph/graphic/index.js +3 -3
  30. package/cjs/scenegraph/graphic/index.js.map +1 -1
  31. package/cjs/scenegraph/graphic/text-contribution-render.d.ts +5 -4
  32. package/cjs/scenegraph/graphic/text-contribution-render.js +3 -3
  33. package/cjs/scenegraph/graphic/text-contribution-render.js.map +1 -1
  34. package/cjs/scenegraph/grid.d.ts +4 -4
  35. package/cjs/scenegraph/grid.js +8 -7
  36. package/cjs/scenegraph/grid.js.map +1 -1
  37. package/cjs/scenegraph/mark-line.d.ts +3 -3
  38. package/cjs/scenegraph/mark-line.js +6 -7
  39. package/cjs/scenegraph/mark-line.js.map +1 -1
  40. package/cjs/scenegraph/scenegraph.d.ts +4 -3
  41. package/cjs/scenegraph/scenegraph.js +5 -5
  42. package/cjs/scenegraph/scenegraph.js.map +1 -1
  43. package/cjs/scenegraph/scroll-bar.d.ts +3 -3
  44. package/cjs/scenegraph/scroll-bar.js +5 -4
  45. package/cjs/scenegraph/scroll-bar.js.map +1 -1
  46. package/cjs/scenegraph/task-bar.d.ts +7 -7
  47. package/cjs/scenegraph/task-bar.js +10 -9
  48. package/cjs/scenegraph/task-bar.js.map +1 -1
  49. package/cjs/scenegraph/timeline-header.d.ts +2 -2
  50. package/cjs/scenegraph/timeline-header.js +7 -7
  51. package/cjs/scenegraph/timeline-header.js.map +1 -1
  52. package/cjs/state/state-manager.d.ts +9 -7
  53. package/cjs/state/state-manager.js +13 -11
  54. package/cjs/state/state-manager.js.map +1 -1
  55. package/cjs/tools/dom.d.ts +1 -0
  56. package/cjs/tools/dom.js +11 -0
  57. package/cjs/tools/dom.js.map +1 -0
  58. package/cjs/tools/index.d.ts +2 -2
  59. package/cjs/tools/index.js +6 -1
  60. package/cjs/tools/index.js.map +1 -1
  61. package/cjs/tools/util.d.ts +1 -0
  62. package/cjs/tools/util.js +12 -3
  63. package/cjs/tools/util.js.map +1 -1
  64. package/cjs/ts-types/events.js +1 -2
  65. package/cjs/ts-types/gantt-engine.d.ts +15 -14
  66. package/cjs/ts-types/gantt-engine.js.map +1 -1
  67. package/dist/vtable-gantt.js +21747 -21704
  68. package/dist/vtable-gantt.min.js +2 -2
  69. package/es/Gantt.d.ts +2 -0
  70. package/es/Gantt.js +24 -17
  71. package/es/Gantt.js.map +1 -1
  72. package/es/components/Menu.d.ts +1 -0
  73. package/es/components/Menu.js +1 -0
  74. package/es/components/Menu.js.map +1 -0
  75. package/es/components/MenuElementStyle.d.ts +1 -0
  76. package/es/components/MenuElementStyle.js +6 -0
  77. package/es/components/MenuElementStyle.js.map +1 -0
  78. package/es/event/event-manager.js +7 -7
  79. package/es/event/event-manager.js.map +1 -1
  80. package/es/event/scroll.js.map +1 -1
  81. package/es/gantt-helper.d.ts +1 -14
  82. package/es/gantt-helper.js +24 -16
  83. package/es/gantt-helper.js.map +1 -1
  84. package/es/index.d.ts +1 -1
  85. package/es/index.js +1 -1
  86. package/es/index.js.map +1 -1
  87. package/es/scenegraph/frame-border.d.ts +2 -2
  88. package/es/scenegraph/frame-border.js +2 -2
  89. package/es/scenegraph/frame-border.js.map +1 -1
  90. package/es/scenegraph/ganttNode.d.ts +7 -6
  91. package/es/scenegraph/ganttNode.js +2 -2
  92. package/es/scenegraph/ganttNode.js.map +1 -1
  93. package/es/scenegraph/graphic/group-contribution-render.d.ts +5 -4
  94. package/es/scenegraph/graphic/group-contribution-render.js +6 -5
  95. package/es/scenegraph/graphic/group-contribution-render.js.map +1 -1
  96. package/es/scenegraph/graphic/index.d.ts +2 -2
  97. package/es/scenegraph/graphic/index.js +3 -3
  98. package/es/scenegraph/graphic/index.js.map +1 -1
  99. package/es/scenegraph/graphic/text-contribution-render.d.ts +5 -4
  100. package/es/scenegraph/graphic/text-contribution-render.js +4 -4
  101. package/es/scenegraph/graphic/text-contribution-render.js.map +1 -1
  102. package/es/scenegraph/grid.d.ts +4 -4
  103. package/es/scenegraph/grid.js +7 -7
  104. package/es/scenegraph/grid.js.map +1 -1
  105. package/es/scenegraph/mark-line.d.ts +3 -3
  106. package/es/scenegraph/mark-line.js +6 -7
  107. package/es/scenegraph/mark-line.js.map +1 -1
  108. package/es/scenegraph/scenegraph.d.ts +4 -3
  109. package/es/scenegraph/scenegraph.js +5 -5
  110. package/es/scenegraph/scenegraph.js.map +1 -1
  111. package/es/scenegraph/scroll-bar.d.ts +3 -3
  112. package/es/scenegraph/scroll-bar.js +5 -4
  113. package/es/scenegraph/scroll-bar.js.map +1 -1
  114. package/es/scenegraph/task-bar.d.ts +7 -7
  115. package/es/scenegraph/task-bar.js +9 -9
  116. package/es/scenegraph/task-bar.js.map +1 -1
  117. package/es/scenegraph/timeline-header.d.ts +2 -2
  118. package/es/scenegraph/timeline-header.js +7 -7
  119. package/es/scenegraph/timeline-header.js.map +1 -1
  120. package/es/state/state-manager.d.ts +9 -7
  121. package/es/state/state-manager.js +13 -11
  122. package/es/state/state-manager.js.map +1 -1
  123. package/es/tools/dom.d.ts +1 -0
  124. package/es/tools/dom.js +5 -0
  125. package/es/tools/dom.js.map +1 -0
  126. package/es/tools/index.d.ts +2 -2
  127. package/es/tools/index.js +2 -2
  128. package/es/tools/index.js.map +1 -1
  129. package/es/tools/util.d.ts +1 -0
  130. package/es/tools/util.js +9 -0
  131. package/es/tools/util.js.map +1 -1
  132. package/es/ts-types/events.js +1 -2
  133. package/es/ts-types/gantt-engine.d.ts +15 -14
  134. package/es/ts-types/gantt-engine.js.map +1 -1
  135. package/package.json +3 -3
package/cjs/Gantt.d.ts CHANGED
@@ -67,6 +67,7 @@ export declare class Gantt extends EventTarget {
67
67
  _minDateTime: number;
68
68
  _maxDateTime: number;
69
69
  markLine: IMarkLine[];
70
+ scrollToMarkLineDate: Date;
70
71
  horizontalSplitLine: ILineStyle;
71
72
  verticalSplitLine: ILineStyle;
72
73
  verticalSplitLineHighlight: ILineStyle;
@@ -109,4 +110,5 @@ export declare class Gantt extends EventTarget {
109
110
  release(): void;
110
111
  setRecords(records: any[]): void;
111
112
  updateScales(scales: ITimelineScale[]): void;
113
+ _scrollToMarkLine(): void;
112
114
  }
package/cjs/Gantt.js CHANGED
@@ -24,7 +24,7 @@ class Gantt extends EventTarget_1.EventTarget {
24
24
  constructor(container, options) {
25
25
  var _a, _b, _c, _d, _e;
26
26
  super(), this.parsedOptions = {}, this.container = container, this.options = options,
27
- this.taskTableWidth = "number" == typeof (null === (_a = null == options ? void 0 : options.taskListTable) || void 0 === _a ? void 0 : _a.width) ? null === (_b = null == options ? void 0 : options.taskListTable) || void 0 === _b ? void 0 : _b.width : (null == options ? void 0 : options.taskListTable) ? 100 : 0,
27
+ this.taskTableWidth = "number" == typeof (null === (_a = null == options ? void 0 : options.taskListTable) || void 0 === _a ? void 0 : _a.tableWidth) ? null === (_b = null == options ? void 0 : options.taskListTable) || void 0 === _b ? void 0 : _b.tableWidth : (null == options ? void 0 : options.taskListTable) ? 100 : 0,
28
28
  this.taskTableColumns = null !== (_d = null === (_c = null == options ? void 0 : options.taskListTable) || void 0 === _c ? void 0 : _c.columns) && void 0 !== _d ? _d : [],
29
29
  this.records = null !== (_e = null == options ? void 0 : options.records) && void 0 !== _e ? _e : [],
30
30
  this._sortScales(), (0, gantt_helper_1.initOptions)(this), this.data = new DataSource_1.DataSource(this),
@@ -40,7 +40,7 @@ class Gantt extends EventTarget_1.EventTarget {
40
40
  this._updateSize()) : this._updateSize(), this._generateListTable(), this._syncPropsFromTable(),
41
41
  (0, gantt_helper_1.createSplitLineAndResizeLine)(this), this.scenegraph = new scenegraph_1.Scenegraph(this),
42
42
  this.stateManager = new state_manager_1.StateManager(this), this.eventManager = new event_manager_1.EventManager(this),
43
- this.scenegraph.afterCreateSceneGraph();
43
+ this.scenegraph.afterCreateSceneGraph(), this._scrollToMarkLine();
44
44
  }
45
45
  renderTaskBarsTable() {
46
46
  this.scenegraph.updateNextFrame();
@@ -64,7 +64,7 @@ class Gantt extends EventTarget_1.EventTarget {
64
64
  (null === (_e = null == this ? void 0 : this.scenegraph) || void 0 === _e ? void 0 : _e.stage) ? this.scenegraph.stage.resize(widthP, heightP) : (canvas.style.width = "",
65
65
  canvas.style.height = "", canvas.width = widthP, canvas.height = heightP, canvas.style.width = `${widthP}px`,
66
66
  canvas.style.height = `${heightP}px`);
67
- } else "node" === env_1.Env.mode && (widthP = this.canvasWidth - 1, heightP = this.canvasHeight - 1);
67
+ } else env_1.Env.mode;
68
68
  const width = Math.floor(widthP - (0, gantt_helper_1.getVerticalScrollBarSize)(this.parsedOptions.scrollStyle)), height = Math.floor(heightP - (0,
69
69
  gantt_helper_1.getHorizontalScrollBarSize)(this.parsedOptions.scrollStyle));
70
70
  if (this.tableNoFrameWidth = widthP, this.tableNoFrameHeight = Math.floor(heightP),
@@ -76,13 +76,13 @@ class Gantt extends EventTarget_1.EventTarget {
76
76
  }
77
77
  }
78
78
  _generateListTable() {
79
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
80
- if (this.taskTableColumns.length >= 1) {
79
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
80
+ if (this.taskTableColumns.length >= 1 || (null === (_a = this.options) || void 0 === _a ? void 0 : _a.rowSeriesNumber)) {
81
81
  const listTableOption = this._generateListTableOptions();
82
82
  if (this.taskListTableInstance = new vtable_1.ListTableSimple(this.container, listTableOption),
83
- "auto" === (null === (_b = null === (_a = this.options) || void 0 === _a ? void 0 : _a.taskListTable) || void 0 === _b ? void 0 : _b.width) && (this.taskTableWidth = this.taskListTableInstance.getAllColsWidth() + this.parsedOptions.outerFrameStyle.borderLineWidth,
84
- (null === (_d = null === (_c = this.options) || void 0 === _c ? void 0 : _c.taskListTable) || void 0 === _d ? void 0 : _d.maxWidth) && (this.taskTableWidth = Math.min(null === (_f = null === (_e = this.options) || void 0 === _e ? void 0 : _e.taskListTable) || void 0 === _f ? void 0 : _f.maxWidth, this.taskTableWidth)),
85
- (null === (_h = null === (_g = this.options) || void 0 === _g ? void 0 : _g.taskListTable) || void 0 === _h ? void 0 : _h.minWidth) && (this.taskTableWidth = Math.max(null === (_k = null === (_j = this.options) || void 0 === _j ? void 0 : _j.taskListTable) || void 0 === _k ? void 0 : _k.minWidth, this.taskTableWidth)),
83
+ "auto" === (null === (_c = null === (_b = this.options) || void 0 === _b ? void 0 : _b.taskListTable) || void 0 === _c ? void 0 : _c.tableWidth) && (this.taskTableWidth = this.taskListTableInstance.getAllColsWidth() + this.parsedOptions.outerFrameStyle.borderLineWidth,
84
+ (null === (_e = null === (_d = this.options) || void 0 === _d ? void 0 : _d.taskListTable) || void 0 === _e ? void 0 : _e.maxTableWidth) && (this.taskTableWidth = Math.min(null === (_g = null === (_f = this.options) || void 0 === _f ? void 0 : _f.taskListTable) || void 0 === _g ? void 0 : _g.maxTableWidth, this.taskTableWidth)),
85
+ (null === (_j = null === (_h = this.options) || void 0 === _h ? void 0 : _h.taskListTable) || void 0 === _j ? void 0 : _j.minTableWidth) && (this.taskTableWidth = Math.max(null === (_l = null === (_k = this.options) || void 0 === _k ? void 0 : _k.taskListTable) || void 0 === _l ? void 0 : _l.minTableWidth, this.taskTableWidth)),
86
86
  this.element.style.left = this.taskTableWidth ? `${this.taskTableWidth}px` : "0px",
87
87
  this.taskListTableInstance.setCanvasSize(this.taskTableWidth, this.tableNoFrameHeight + 2 * this.parsedOptions.outerFrameStyle.borderLineWidth),
88
88
  this._updateSize()), this.taskListTableInstance.columnHeaderLevelCount > 1) if (this.taskListTableInstance.columnHeaderLevelCount === this.parsedOptions.timeLineHeaderRowHeights.length) for (let i = 0; i < this.taskListTableInstance.columnHeaderLevelCount; i++) this.taskListTableInstance.setRowHeight(i, this.parsedOptions.timeLineHeaderRowHeights[i]); else {
@@ -92,25 +92,25 @@ class Gantt extends EventTarget_1.EventTarget {
92
92
  }
93
93
  }
94
94
  _generateListTableOptions() {
95
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
95
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
96
96
  const listTable_options = {}, needPutInListTableKeys = [ "container", "records", "rowSeriesNumber", "overscrollBehavior", "pixelRatio" ];
97
97
  for (const key in this.options) needPutInListTableKeys.indexOf(key) >= 0 && (listTable_options[key] = this.options[key]);
98
98
  for (const key in this.options.taskListTable) listTable_options[key] = this.options.taskListTable[key],
99
99
  "columns" === key && (listTable_options[key][listTable_options[key].length - 1].disableColumnResize = !0);
100
- return listTable_options.theme = {
100
+ return listTable_options.theme = Object.assign({}, null === (_a = this.options.taskListTable) || void 0 === _a ? void 0 : _a.theme, {
101
101
  scrollStyle: Object.assign({}, this.parsedOptions.scrollStyle, {
102
102
  verticalVisible: "none"
103
- }),
103
+ }, null === (_c = null === (_b = this.options.taskListTable) || void 0 === _b ? void 0 : _b.theme) || void 0 === _c ? void 0 : _c.scrollStyle),
104
104
  headerStyle: Object.assign({}, vtable_1.themes.DEFAULT.headerStyle, {
105
105
  bgColor: this.parsedOptions.timelineHeaderBackgroundColor
106
- }, this.options.taskListTable.headerStyle),
106
+ }, null === (_e = null === (_d = this.options.taskListTable) || void 0 === _d ? void 0 : _d.theme) || void 0 === _e ? void 0 : _e.headerStyle),
107
+ bodyStyle: Object.assign({}, vtable_1.themes.DEFAULT.bodyStyle, null === (_g = null === (_f = this.options.taskListTable) || void 0 === _f ? void 0 : _f.theme) || void 0 === _g ? void 0 : _g.bodyStyle),
107
108
  cellInnerBorder: !1,
108
109
  frameStyle: Object.assign({}, this.parsedOptions.outerFrameStyle, {
109
- cornerRadius: [ null !== (_b = null === (_a = this.parsedOptions.outerFrameStyle) || void 0 === _a ? void 0 : _a.cornerRadius) && void 0 !== _b ? _b : 0, 0, 0, null !== (_d = null === (_c = this.parsedOptions.outerFrameStyle) || void 0 === _c ? void 0 : _c.cornerRadius) && void 0 !== _d ? _d : 0 ],
110
- borderLineWidth: [ null !== (_f = null === (_e = this.parsedOptions.outerFrameStyle) || void 0 === _e ? void 0 : _e.borderLineWidth) && void 0 !== _f ? _f : 0, 0, null !== (_h = null === (_g = this.parsedOptions.outerFrameStyle) || void 0 === _g ? void 0 : _g.borderLineWidth) && void 0 !== _h ? _h : 0, null !== (_k = null === (_j = this.parsedOptions.outerFrameStyle) || void 0 === _j ? void 0 : _j.borderLineWidth) && void 0 !== _k ? _k : 0 ]
111
- }),
112
- bodyStyle: Object.assign({}, vtable_1.themes.DEFAULT.bodyStyle, this.options.taskListTable.bodyStyle)
113
- }, listTable_options.canvasWidth = this.taskTableWidth, listTable_options.canvasHeight = this.canvas.height,
110
+ cornerRadius: [ null !== (_j = null === (_h = this.parsedOptions.outerFrameStyle) || void 0 === _h ? void 0 : _h.cornerRadius) && void 0 !== _j ? _j : 0, 0, 0, null !== (_l = null === (_k = this.parsedOptions.outerFrameStyle) || void 0 === _k ? void 0 : _k.cornerRadius) && void 0 !== _l ? _l : 0 ],
111
+ borderLineWidth: [ null !== (_o = null === (_m = this.parsedOptions.outerFrameStyle) || void 0 === _m ? void 0 : _m.borderLineWidth) && void 0 !== _o ? _o : 0, 0, null !== (_q = null === (_p = this.parsedOptions.outerFrameStyle) || void 0 === _p ? void 0 : _p.borderLineWidth) && void 0 !== _q ? _q : 0, null !== (_s = null === (_r = this.parsedOptions.outerFrameStyle) || void 0 === _r ? void 0 : _r.borderLineWidth) && void 0 !== _s ? _s : 0 ]
112
+ })
113
+ }), listTable_options.canvasWidth = this.taskTableWidth, listTable_options.canvasHeight = this.canvas.height,
114
114
  listTable_options.defaultHeaderRowHeight = this.getAllHeaderRowsHeight(), listTable_options.defaultRowHeight = this.parsedOptions.rowHeight,
115
115
  listTable_options.clearDOM = !1, listTable_options;
116
116
  }
@@ -242,6 +242,12 @@ class Gantt extends EventTarget_1.EventTarget {
242
242
  for (let i = 0; i < this.taskListTableInstance.columnHeaderLevelCount; i++) this.taskListTableInstance.setRowHeight(i, newRowHeight);
243
243
  }
244
244
  }
245
+ _scrollToMarkLine() {
246
+ if (this.parsedOptions.scrollToMarkLineDate) {
247
+ const minDate = this.parsedOptions.minDate, left = (this.parsedOptions.scrollToMarkLineDate.getTime() - minDate.getTime()) / 864e5 * this.parsedOptions.colWidthPerDay - this.tableNoFrameWidth / 2;
248
+ this.stateManager.setScrollLeft(left);
249
+ }
250
+ }
245
251
  }
246
252
 
247
253
  exports.Gantt = Gantt;
package/cjs/Gantt.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Gantt.ts"],"names":[],"mappings":"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","file":"Gantt.js","sourcesContent":["// import themes from './themes';\n// import { createRootElement } from './core/tableHelper';\nimport { Scenegraph } from './scenegraph/scenegraph';\nimport { Env } from './env';\nimport type {\n ITaskBarStyle,\n GanttConstructorOptions,\n IGrid,\n ITimelineHeaderStyle,\n IMarkLine,\n ITaskBarLabelText,\n ITaskBarLabelTextStyle,\n IScrollStyle,\n IFrameStyle,\n ITableColumnsDefine,\n ITaskBarCustomLayout,\n ITimelineDateInfo,\n ITimelineScale,\n ILineStyle\n} from './ts-types';\nimport type { ListTableConstructorOptions } from '@visactor/vtable';\nimport {\n ListTableSimple,\n themes,\n registerCheckboxCell,\n registerProgressBarCell,\n registerRadioCell\n} from '@visactor/vtable';\nimport { EventManager } from './event/event-manager';\nimport { StateManager } from './state/state-manager';\nimport {\n convertProgress,\n createSplitLineAndResizeLine,\n DayTimes,\n generateTimeLineDate,\n getHorizontalScrollBarSize,\n getVerticalScrollBarSize,\n initOptions,\n updateSplitLineAndResizeLine\n} from './gantt-helper';\nimport { EventTarget } from './event/EventTarget';\nimport { formatDate, getWeekNumber, parseDateFormat, toBoxArray } from './tools/util';\nimport { DataSource } from './data/DataSource';\nregisterCheckboxCell();\nregisterProgressBarCell();\nregisterRadioCell();\n// import { generateGanttChartColumns } from './gantt-helper';\nexport function createRootElement(padding: any, className: string = 'vtable-gantt'): HTMLElement {\n const element = document.createElement('div');\n element.setAttribute('tabindex', '0');\n element.classList.add(className);\n element.style.outline = 'none';\n element.style.margin = `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;\n\n const width = (element.offsetWidth || element.parentElement?.offsetWidth || 1) - 1;\n const height = (element.offsetHeight || element.parentElement?.offsetHeight || 1) - 1;\n\n element.style.width = (width && `${width - padding.left - padding.right}px`) || '0px';\n element.style.height = (height && `${height - padding.top - padding.bottom}px`) || '0px';\n\n return element;\n}\nexport class Gantt extends EventTarget {\n options: GanttConstructorOptions;\n container: HTMLElement;\n /** 相比于canvas的宽度 会减掉:右侧frame边框的宽度 以及中间分割线verticalSplitLine.lineWidth */\n tableNoFrameWidth: number;\n /** 相比于canvas的宽度 会减掉:上面和下面frame边框的宽度 */\n tableNoFrameHeight: number;\n /** 真正展示gantt甘特图的其实位置 应该是等于中间分割线的宽度verticalSplitLine.lineWidth。\n * 分割线底部仍然是canvas 因为需要canvas绘制frame边框线\n * scenegraph中的tableGroup的 attr.x 会等于该值\n */\n tableX: number;\n tableY: number;\n scenegraph: Scenegraph;\n stateManager: StateManager;\n eventManager: EventManager;\n\n taskListTableInstance?: ListTableSimple;\n\n canvas: HTMLCanvasElement;\n element: HTMLElement;\n verticalSplitResizeLine: HTMLDivElement;\n horizontalSplitLine: HTMLDivElement;\n context: CanvasRenderingContext2D;\n\n timeLineHeaderLevel: number;\n itemCount: number;\n drawHeight: number;\n headerHeight: number;\n gridHeight: number;\n\n parsedOptions: {\n timeLineHeaderRowHeights: number[];\n rowHeight: number;\n timelineColWidth: number;\n colWidthPerDay: number; //分配给每日的宽度\n\n scrollStyle: IScrollStyle;\n // timelineHeaderStyle: ITimelineHeaderStyle;\n timelineHeaderVerticalLineStyle: ILineStyle;\n timelineHeaderHorizontalLineStyle: ILineStyle;\n timelineHeaderBackgroundColor: string;\n timelineHeaderStyles: ITimelineHeaderStyle[];\n sortedTimelineScales: (ITimelineScale & { timelineDates?: ITimelineDateInfo[] })[];\n reverseSortedTimelineScales: (ITimelineScale & { timelineDates?: ITimelineDateInfo[] })[];\n grid: IGrid;\n taskBarStyle: ITaskBarStyle;\n taskBarHoverStyle: ITaskBarStyle & { barOverLayColor?: string };\n taskBarSelectionStyle: ITaskBarStyle & { barOverLayColor?: string };\n taskBarLabelText: ITaskBarLabelText;\n taskBarMoveable: boolean;\n taskBarResizable: boolean;\n taskBarLabelStyle: ITaskBarLabelTextStyle;\n taskBarCustomLayout: ITaskBarCustomLayout;\n outerFrameStyle: IFrameStyle;\n pixelRatio: number;\n\n startDateField: string;\n endDateField: string;\n progressField: string;\n minDate: Date;\n maxDate: Date;\n _minDateTime: number;\n _maxDateTime: number;\n markLine: IMarkLine[];\n horizontalSplitLine: ILineStyle;\n verticalSplitLine: ILineStyle;\n verticalSplitLineHighlight: ILineStyle;\n verticalSplitLineMoveable?: boolean;\n overscrollBehavior: 'auto' | 'none';\n } = {} as any;\n /** 左侧任务表格的整体宽度 比表格实例taskListTableInstance的tableNoFrameWidth会多出左侧frame边框的宽度 */\n taskTableWidth: number;\n taskTableColumns: ITableColumnsDefine;\n\n records: any[];\n data: DataSource;\n constructor(container: HTMLElement, options: GanttConstructorOptions) {\n super();\n this.container = container;\n this.options = options;\n\n this.taskTableWidth =\n typeof options?.taskListTable?.width === 'number'\n ? options?.taskListTable?.width\n : options?.taskListTable\n ? 100\n : 0;\n this.taskTableColumns = options?.taskListTable?.columns ?? [];\n this.records = options?.records ?? [];\n\n this._sortScales();\n initOptions(this);\n this.data = new DataSource(this);\n this._generateTimeLineDateMap();\n\n this.timeLineHeaderLevel = this.parsedOptions.sortedTimelineScales.length;\n this.element = createRootElement({ top: 0, right: 0, left: 0, bottom: 0 }, 'vtable-gantt');\n // this.element.style.top = '0px';\n this.element.style.left = this.taskTableWidth ? `${this.taskTableWidth}px` : '0px';\n\n this.canvas = document.createElement('canvas');\n this.element.appendChild(this.canvas);\n this.context = this.canvas.getContext('2d')!;\n if (container) {\n (container as HTMLElement).appendChild(this.element);\n this._updateSize();\n } else {\n this._updateSize();\n }\n this._generateListTable();\n this._syncPropsFromTable();\n\n createSplitLineAndResizeLine(this);\n this.scenegraph = new Scenegraph(this);\n this.stateManager = new StateManager(this);\n this.eventManager = new EventManager(this);\n\n this.scenegraph.afterCreateSceneGraph();\n }\n\n renderTaskBarsTable() {\n this.scenegraph.updateNextFrame();\n }\n /**\n * 窗口尺寸发生变化 或者像数比变化\n * @return {void}\n */\n _updateSize(): void {\n let widthP = 0;\n let heightP = 0;\n\n if (Env.mode === 'browser') {\n const element = this.getElement();\n let widthWithoutPadding = 0;\n let heightWithoutPadding = 0;\n if (element.parentElement) {\n const computedStyle = element.parentElement.style || window.getComputedStyle(element.parentElement); // 兼容性处理\n widthWithoutPadding =\n element.parentElement.offsetWidth -\n parseInt(computedStyle.paddingLeft || '0px', 10) -\n parseInt(computedStyle.paddingRight || '0px', 10);\n heightWithoutPadding =\n element.parentElement.offsetHeight -\n parseInt(computedStyle.paddingTop || '0px', 10) -\n parseInt(computedStyle.paddingBottom || '0px', 20);\n }\n const width1 = (widthWithoutPadding ?? 1) - 1 - this.taskTableWidth;\n const height1 = (heightWithoutPadding ?? 1) - 1;\n\n element.style.width = (width1 && `${width1}px`) || '0px';\n element.style.height = (height1 && `${height1}px`) || '0px';\n\n const { canvas } = this;\n\n widthP = canvas.parentElement?.offsetWidth ?? 1;\n heightP = canvas.parentElement?.offsetHeight ?? 1;\n\n //style 与 width,height相同\n if (this?.scenegraph?.stage) {\n this.scenegraph.stage.resize(widthP, heightP);\n } else {\n canvas.style.width = '';\n canvas.style.height = '';\n canvas.width = widthP;\n canvas.height = heightP;\n\n canvas.style.width = `${widthP}px`;\n canvas.style.height = `${heightP}px`;\n }\n } else if (Env.mode === 'node') {\n widthP = this.canvasWidth - 1;\n heightP = this.canvasHeight - 1;\n }\n const width = Math.floor(widthP - getVerticalScrollBarSize(this.parsedOptions.scrollStyle));\n const height = Math.floor(heightP - getHorizontalScrollBarSize(this.parsedOptions.scrollStyle));\n\n this.tableNoFrameWidth = widthP;\n this.tableNoFrameHeight = Math.floor(heightP);\n if (this.parsedOptions.outerFrameStyle) {\n //考虑表格整体边框的问题\n const lineWidth = this.parsedOptions.outerFrameStyle?.borderLineWidth; // toBoxArray(this.parsedOptions.frameStyle?.borderLineWidth ?? [null]);\n this.tableX = this.taskListTableInstance ? this.parsedOptions.verticalSplitLine.lineWidth ?? 0 : lineWidth;\n this.tableY = lineWidth;\n this.tableNoFrameWidth = width - lineWidth - this.parsedOptions.verticalSplitLine.lineWidth;\n\n this.tableNoFrameHeight = height - lineWidth * 2;\n }\n }\n _generateListTable() {\n if (this.taskTableColumns.length >= 1) {\n const listTableOption = this._generateListTableOptions();\n this.taskListTableInstance = new ListTableSimple(this.container, listTableOption);\n\n if (this.options?.taskListTable?.width === 'auto') {\n this.taskTableWidth =\n this.taskListTableInstance.getAllColsWidth() + this.parsedOptions.outerFrameStyle.borderLineWidth;\n if (this.options?.taskListTable?.maxWidth) {\n this.taskTableWidth = Math.min(this.options?.taskListTable?.maxWidth, this.taskTableWidth);\n }\n if (this.options?.taskListTable?.minWidth) {\n this.taskTableWidth = Math.max(this.options?.taskListTable?.minWidth, this.taskTableWidth);\n }\n this.element.style.left = this.taskTableWidth ? `${this.taskTableWidth}px` : '0px';\n this.taskListTableInstance.setCanvasSize(\n this.taskTableWidth,\n this.tableNoFrameHeight + this.parsedOptions.outerFrameStyle.borderLineWidth * 2\n );\n this._updateSize();\n }\n\n if (this.taskListTableInstance.columnHeaderLevelCount > 1) {\n if (this.taskListTableInstance.columnHeaderLevelCount === this.parsedOptions.timeLineHeaderRowHeights.length) {\n for (let i = 0; i < this.taskListTableInstance.columnHeaderLevelCount; i++) {\n this.taskListTableInstance.setRowHeight(i, this.parsedOptions.timeLineHeaderRowHeights[i]);\n }\n } else {\n const newRowHeight = this.getAllHeaderRowsHeight() / this.taskListTableInstance.columnHeaderLevelCount;\n for (let i = 0; i < this.taskListTableInstance.columnHeaderLevelCount; i++) {\n this.taskListTableInstance.setRowHeight(i, newRowHeight);\n }\n }\n }\n }\n }\n _generateListTableOptions() {\n const listTable_options: ListTableConstructorOptions = {};\n const needPutInListTableKeys = ['container', 'records', 'rowSeriesNumber', 'overscrollBehavior', 'pixelRatio'];\n for (const key in this.options) {\n if (needPutInListTableKeys.indexOf(key) >= 0) {\n listTable_options[key] = this.options[key];\n }\n }\n for (const key in this.options.taskListTable) {\n listTable_options[key] = this.options.taskListTable[key];\n if (key === 'columns') {\n listTable_options[key][listTable_options[key].length - 1].disableColumnResize = true;\n }\n }\n // lineWidthArr[1] = 0;\n listTable_options.theme = {\n scrollStyle: Object.assign({}, this.parsedOptions.scrollStyle, {\n verticalVisible: 'none'\n }),\n headerStyle: Object.assign(\n {},\n themes.DEFAULT.headerStyle,\n {\n bgColor: this.parsedOptions.timelineHeaderBackgroundColor\n },\n this.options.taskListTable.headerStyle\n ),\n cellInnerBorder: false,\n frameStyle: Object.assign({}, this.parsedOptions.outerFrameStyle, {\n cornerRadius: [\n this.parsedOptions.outerFrameStyle?.cornerRadius ?? 0,\n 0,\n 0,\n this.parsedOptions.outerFrameStyle?.cornerRadius ?? 0\n ],\n borderLineWidth: [\n this.parsedOptions.outerFrameStyle?.borderLineWidth ?? 0,\n 0,\n this.parsedOptions.outerFrameStyle?.borderLineWidth ?? 0,\n this.parsedOptions.outerFrameStyle?.borderLineWidth ?? 0\n ]\n }),\n bodyStyle: Object.assign({}, themes.DEFAULT.bodyStyle, this.options.taskListTable.bodyStyle)\n };\n listTable_options.canvasWidth = this.taskTableWidth as number;\n listTable_options.canvasHeight = this.canvas.height;\n listTable_options.defaultHeaderRowHeight = this.getAllHeaderRowsHeight();\n listTable_options.defaultRowHeight = this.parsedOptions.rowHeight;\n listTable_options.clearDOM = false;\n return listTable_options;\n }\n\n /**\n * 获取表格创建的DOM根节点\n */\n getElement(): HTMLElement {\n return this.element;\n }\n\n /**\n * 获取创建gantt传入的容器\n */\n getContainer(): HTMLElement {\n return this.element.parentElement;\n }\n\n _sortScales() {\n const { timelineHeader } = this.options;\n if (timelineHeader) {\n const timelineScales = timelineHeader.scales;\n const sortOrder = ['year', 'quarter', 'month', 'week', 'day'];\n const orderedScales = timelineScales.slice().sort((a, b) => {\n const indexA = sortOrder.indexOf(a.unit);\n const indexB = sortOrder.indexOf(b.unit);\n if (indexA === -1) {\n return 1;\n } else if (indexB === -1) {\n return -1;\n }\n return indexA - indexB;\n });\n const reverseOrderedScales = timelineScales.slice().sort((a, b) => {\n const indexA = sortOrder.indexOf(a.unit);\n const indexB = sortOrder.indexOf(b.unit);\n if (indexA === -1) {\n return 1;\n } else if (indexB === -1) {\n return -1;\n }\n return indexB - indexA;\n });\n\n this.parsedOptions.sortedTimelineScales = orderedScales;\n this.parsedOptions.reverseSortedTimelineScales = reverseOrderedScales;\n }\n }\n\n _generateTimeLineDateMap() {\n const startDate = new Date(this.parsedOptions.minDate);\n const endDate = new Date(this.parsedOptions.maxDate);\n let colWidthIncludeDays = 1000000;\n // Iterate over each scale\n for (const scale of this.parsedOptions.reverseSortedTimelineScales) {\n // Generate the sub-columns for each step within the scale\n const currentDate = new Date(startDate);\n // const timelineDates: any[] = [];\n scale.timelineDates = generateTimeLineDate(currentDate, endDate, scale);\n }\n\n const firstScale = this.parsedOptions.reverseSortedTimelineScales[0];\n const { unit, step } = firstScale;\n if (unit === 'day') {\n colWidthIncludeDays = step;\n } else if (unit === 'month') {\n colWidthIncludeDays = 30;\n } else if (unit === 'week') {\n colWidthIncludeDays = 7;\n } else if (unit === 'quarter') {\n colWidthIncludeDays = 90;\n } else if (unit === 'year') {\n colWidthIncludeDays = 365;\n }\n this.parsedOptions.colWidthPerDay = this.parsedOptions.timelineColWidth / colWidthIncludeDays;\n }\n getAllRowsHeight() {\n return this.getAllHeaderRowsHeight() + this.itemCount * this.parsedOptions.rowHeight;\n }\n getAllHeaderRowsHeight() {\n // if (Array.isArray(this.parsedOptions.timeLineHeaderRowHeights)) {\n return this.parsedOptions.timeLineHeaderRowHeights.reduce((acc, curr, index) => {\n return acc + curr;\n }, 0);\n // }\n // return (this.parsedOptions.timeLineHeaderRowHeights as number) * this.timeLineHeaderLevel;\n }\n getAllColsWidth() {\n return (\n this.parsedOptions.colWidthPerDay *\n (Math.ceil(\n Math.abs(new Date(this.parsedOptions.maxDate).getTime() - new Date(this.parsedOptions.minDate).getTime()) /\n (1000 * 60 * 60 * 24)\n ) +\n 1)\n );\n }\n\n getAllTaskBarsHeight() {\n return this.itemCount * this.parsedOptions.rowHeight;\n }\n\n getRecordByIndex(index: number) {\n if (this.taskListTableInstance) {\n return this.taskListTableInstance.getRecordByRowCol(0, index + this.taskListTableInstance.columnHeaderLevelCount);\n }\n return this.records[index];\n }\n\n refreshTaskBar(index: number) {\n // this.listTableInstance.updateRecords([record], [index]);\n this.scenegraph.taskBar.updateTaskBarNode(index);\n this.scenegraph.updateNextFrame();\n }\n updateRecordToListTable(record: any, index: number) {\n this.taskListTableInstance.updateRecords([record], [index]);\n }\n /**\n * 获取指定index处任务数据的具体信息\n * @param index\n * @returns 当前任务信息\n */\n getTaskInfoByTaskListIndex(index: number): {\n taskRecord: any;\n taskDays: number;\n startDate: Date;\n endDate: Date;\n progress: number;\n } {\n const taskRecord = this.getRecordByIndex(index);\n const startDateField = this.parsedOptions.startDateField;\n const endDateField = this.parsedOptions.endDateField;\n const progressField = this.parsedOptions.progressField;\n const rawDateStartDateTime = new Date(taskRecord[startDateField]).getTime();\n const rawDateEndDateTime = new Date(taskRecord[endDateField]).getTime();\n if (\n rawDateEndDateTime < this.parsedOptions._minDateTime ||\n rawDateStartDateTime > this.parsedOptions._maxDateTime\n ) {\n return {\n taskDays: 0,\n progress: 0,\n startDate: null,\n endDate: null,\n taskRecord\n };\n }\n const startDate = new Date(\n Math.min(Math.max(this.parsedOptions._minDateTime, rawDateStartDateTime), this.parsedOptions._maxDateTime)\n );\n const endDate = new Date(\n Math.max(Math.min(this.parsedOptions._maxDateTime, rawDateEndDateTime), this.parsedOptions._minDateTime)\n );\n const progress = convertProgress(taskRecord[progressField]);\n const taskDays = Math.ceil(Math.abs(endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)) + 1;\n return {\n taskRecord,\n taskDays,\n startDate,\n endDate,\n progress\n };\n }\n /**\n * 拖拽任务条或者调整任务条尺寸修改日期更新到数据中\n * @param updateDateType\n * @param days\n * @param index\n */\n _updateDateToTaskRecord(updateDateType: 'move' | 'start-move' | 'end-move', days: number, index: number) {\n const taskRecord = this.getRecordByIndex(index);\n const startDateField = this.parsedOptions.startDateField;\n const endDateField = this.parsedOptions.endDateField;\n const dateFormat = parseDateFormat(taskRecord[startDateField]);\n const startDate = new Date(taskRecord[startDateField]);\n const endDate = new Date(taskRecord[endDateField]);\n if (updateDateType === 'move') {\n const newStartDate = formatDate(new Date(days * DayTimes + startDate.getTime()), dateFormat);\n const newEndDate = formatDate(new Date(days * DayTimes + endDate.getTime()), dateFormat);\n taskRecord[startDateField] = newStartDate;\n taskRecord[endDateField] = newEndDate;\n } else if (updateDateType === 'start-move') {\n const newStartDate = formatDate(new Date(days * DayTimes + startDate.getTime()), dateFormat);\n taskRecord[startDateField] = newStartDate;\n } else if (updateDateType === 'end-move') {\n const newEndDate = formatDate(new Date(days * DayTimes + endDate.getTime()), dateFormat);\n taskRecord[endDateField] = newEndDate;\n }\n this.updateRecordToListTable(taskRecord, index);\n }\n /** TODO */\n updateTaskRecord(record: any, index: number) {\n //const taskRecord = this.getRecordByIndex(index);\n this.updateRecordToListTable(record, index);\n this.refreshTaskBar(index);\n }\n\n /**\n * 设置像数比\n * @param pixelRatio\n */\n setPixelRatio(pixelRatio: number) {\n this.parsedOptions.pixelRatio = pixelRatio;\n this.scenegraph.setPixelRatio(pixelRatio);\n }\n\n _resize() {\n this._updateSize();\n this.taskListTableInstance.setCanvasSize(\n this.taskTableWidth,\n this.tableNoFrameHeight + this.parsedOptions.outerFrameStyle.borderLineWidth * 2\n );\n this._syncPropsFromTable();\n this.scenegraph.resize();\n updateSplitLineAndResizeLine(this);\n }\n _syncPropsFromTable() {\n this.itemCount = this.taskListTableInstance\n ? this.taskListTableInstance.rowCount - this.taskListTableInstance.columnHeaderLevelCount\n : this.records.length;\n this.headerHeight = this.getAllHeaderRowsHeight();\n this.drawHeight = Math.min(\n this.headerHeight + this.parsedOptions.rowHeight * this.itemCount,\n this.tableNoFrameHeight\n );\n this.gridHeight = this.drawHeight - this.headerHeight;\n }\n /** 获取绘制画布的canvas上下文 */\n getContext(): CanvasRenderingContext2D {\n return this.context;\n }\n\n release(): void {\n super.release?.();\n this.eventManager.release();\n this.taskListTableInstance?.release();\n const { parentElement } = this.element;\n if (parentElement) {\n parentElement.removeChild(this.element);\n this.verticalSplitResizeLine && parentElement.removeChild(this.verticalSplitResizeLine);\n this.horizontalSplitLine && parentElement.removeChild(this.horizontalSplitLine);\n }\n this.scenegraph = null;\n }\n setRecords(records: any[]) {\n this.records = records;\n this.taskListTableInstance.setRecords(records);\n this._syncPropsFromTable();\n this.verticalSplitResizeLine.style.height = this.drawHeight + 'px'; //'100%';\n this.scenegraph.refreshTaskBarsAndGrid();\n const left = this.stateManager.scroll.horizontalBarPos;\n const top = this.stateManager.scroll.verticalBarPos;\n this.scenegraph.setX(-left);\n this.scenegraph.setY(-top);\n }\n updateScales(scales: ITimelineScale[]) {\n const gantt = this;\n this.options.timelineHeader.scales = scales;\n this._sortScales();\n initOptions(gantt);\n this._generateTimeLineDateMap();\n this.timeLineHeaderLevel = this.parsedOptions.sortedTimelineScales.length;\n this.scenegraph.refreshAll();\n updateSplitLineAndResizeLine(this);\n if (this.taskListTableInstance) {\n if (this.taskListTableInstance.columnHeaderLevelCount === this.parsedOptions.timeLineHeaderRowHeights.length) {\n for (let i = 0; i < this.taskListTableInstance.columnHeaderLevelCount; i++) {\n this.taskListTableInstance.setRowHeight(i, this.parsedOptions.timeLineHeaderRowHeights[i]);\n }\n } else {\n const newRowHeight = this.getAllHeaderRowsHeight() / this.taskListTableInstance.columnHeaderLevelCount;\n for (let i = 0; i < this.taskListTableInstance.columnHeaderLevelCount; i++) {\n this.taskListTableInstance.setRowHeight(i, newRowHeight);\n }\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/Gantt.ts"],"names":[],"mappings":"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","file":"Gantt.js","sourcesContent":["// import themes from './themes';\n// import { createRootElement } from './core/tableHelper';\nimport { Scenegraph } from './scenegraph/scenegraph';\nimport { Env } from './env';\nimport type {\n ITaskBarStyle,\n GanttConstructorOptions,\n IGrid,\n ITimelineHeaderStyle,\n IMarkLine,\n ITaskBarLabelText,\n ITaskBarLabelTextStyle,\n IScrollStyle,\n IFrameStyle,\n ITableColumnsDefine,\n ITaskBarCustomLayout,\n ITimelineDateInfo,\n ITimelineScale,\n ILineStyle\n} from './ts-types';\nimport type { ListTableConstructorOptions } from '@visactor/vtable';\nimport {\n ListTableSimple,\n themes,\n registerCheckboxCell,\n registerProgressBarCell,\n registerRadioCell\n} from '@visactor/vtable';\nimport { EventManager } from './event/event-manager';\nimport { StateManager } from './state/state-manager';\nimport {\n convertProgress,\n createSplitLineAndResizeLine,\n DayTimes,\n generateTimeLineDate,\n getHorizontalScrollBarSize,\n getVerticalScrollBarSize,\n initOptions,\n updateSplitLineAndResizeLine\n} from './gantt-helper';\nimport { EventTarget } from './event/EventTarget';\nimport { formatDate, getWeekNumber, parseDateFormat, toBoxArray } from './tools/util';\nimport { DataSource } from './data/DataSource';\nregisterCheckboxCell();\nregisterProgressBarCell();\nregisterRadioCell();\n// import { generateGanttChartColumns } from './gantt-helper';\nexport function createRootElement(padding: any, className: string = 'vtable-gantt'): HTMLElement {\n const element = document.createElement('div');\n element.setAttribute('tabindex', '0');\n element.classList.add(className);\n element.style.outline = 'none';\n element.style.margin = `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;\n\n const width = (element.offsetWidth || element.parentElement?.offsetWidth || 1) - 1;\n const height = (element.offsetHeight || element.parentElement?.offsetHeight || 1) - 1;\n\n element.style.width = (width && `${width - padding.left - padding.right}px`) || '0px';\n element.style.height = (height && `${height - padding.top - padding.bottom}px`) || '0px';\n\n return element;\n}\nexport class Gantt extends EventTarget {\n options: GanttConstructorOptions;\n container: HTMLElement;\n /** 相比于canvas的宽度 会减掉:右侧frame边框的宽度 以及中间分割线verticalSplitLine.lineWidth */\n tableNoFrameWidth: number;\n /** 相比于canvas的宽度 会减掉:上面和下面frame边框的宽度 */\n tableNoFrameHeight: number;\n /** 真正展示gantt甘特图的其实位置 应该是等于中间分割线的宽度verticalSplitLine.lineWidth。\n * 分割线底部仍然是canvas 因为需要canvas绘制frame边框线\n * scenegraph中的tableGroup的 attr.x 会等于该值\n */\n tableX: number;\n tableY: number;\n scenegraph: Scenegraph;\n stateManager: StateManager;\n eventManager: EventManager;\n\n taskListTableInstance?: ListTableSimple;\n\n canvas: HTMLCanvasElement;\n element: HTMLElement;\n verticalSplitResizeLine: HTMLDivElement;\n horizontalSplitLine: HTMLDivElement;\n context: CanvasRenderingContext2D;\n\n timeLineHeaderLevel: number;\n itemCount: number;\n drawHeight: number;\n headerHeight: number;\n gridHeight: number;\n\n parsedOptions: {\n timeLineHeaderRowHeights: number[];\n rowHeight: number;\n timelineColWidth: number;\n colWidthPerDay: number; //分配给每日的宽度\n\n scrollStyle: IScrollStyle;\n // timelineHeaderStyle: ITimelineHeaderStyle;\n timelineHeaderVerticalLineStyle: ILineStyle;\n timelineHeaderHorizontalLineStyle: ILineStyle;\n timelineHeaderBackgroundColor: string;\n timelineHeaderStyles: ITimelineHeaderStyle[];\n sortedTimelineScales: (ITimelineScale & { timelineDates?: ITimelineDateInfo[] })[];\n reverseSortedTimelineScales: (ITimelineScale & { timelineDates?: ITimelineDateInfo[] })[];\n grid: IGrid;\n taskBarStyle: ITaskBarStyle;\n taskBarHoverStyle: ITaskBarStyle & { barOverLayColor?: string };\n taskBarSelectionStyle: ITaskBarStyle & { barOverLayColor?: string };\n taskBarLabelText: ITaskBarLabelText;\n taskBarMoveable: boolean;\n taskBarResizable: boolean;\n taskBarLabelStyle: ITaskBarLabelTextStyle;\n taskBarCustomLayout: ITaskBarCustomLayout;\n outerFrameStyle: IFrameStyle;\n pixelRatio: number;\n\n startDateField: string;\n endDateField: string;\n progressField: string;\n minDate: Date;\n maxDate: Date;\n _minDateTime: number;\n _maxDateTime: number;\n markLine: IMarkLine[];\n scrollToMarkLineDate: Date;\n horizontalSplitLine: ILineStyle;\n verticalSplitLine: ILineStyle;\n verticalSplitLineHighlight: ILineStyle;\n verticalSplitLineMoveable?: boolean;\n overscrollBehavior: 'auto' | 'none';\n } = {} as any;\n /** 左侧任务表格的整体宽度 比表格实例taskListTableInstance的tableNoFrameWidth会多出左侧frame边框的宽度 */\n taskTableWidth: number;\n taskTableColumns: ITableColumnsDefine;\n\n records: any[];\n data: DataSource;\n constructor(container: HTMLElement, options: GanttConstructorOptions) {\n super();\n this.container = container;\n this.options = options;\n\n this.taskTableWidth =\n typeof options?.taskListTable?.tableWidth === 'number'\n ? options?.taskListTable?.tableWidth\n : options?.taskListTable\n ? 100\n : 0;\n this.taskTableColumns = options?.taskListTable?.columns ?? [];\n this.records = options?.records ?? [];\n\n this._sortScales();\n initOptions(this);\n this.data = new DataSource(this);\n this._generateTimeLineDateMap();\n\n this.timeLineHeaderLevel = this.parsedOptions.sortedTimelineScales.length;\n this.element = createRootElement({ top: 0, right: 0, left: 0, bottom: 0 }, 'vtable-gantt');\n // this.element.style.top = '0px';\n this.element.style.left = this.taskTableWidth ? `${this.taskTableWidth}px` : '0px';\n\n this.canvas = document.createElement('canvas');\n this.element.appendChild(this.canvas);\n this.context = this.canvas.getContext('2d')!;\n if (container) {\n (container as HTMLElement).appendChild(this.element);\n this._updateSize();\n } else {\n this._updateSize();\n }\n this._generateListTable();\n this._syncPropsFromTable();\n\n createSplitLineAndResizeLine(this);\n this.scenegraph = new Scenegraph(this);\n this.stateManager = new StateManager(this);\n this.eventManager = new EventManager(this);\n\n this.scenegraph.afterCreateSceneGraph();\n this._scrollToMarkLine();\n }\n\n renderTaskBarsTable() {\n this.scenegraph.updateNextFrame();\n }\n /**\n * 窗口尺寸发生变化 或者像数比变化\n * @return {void}\n */\n _updateSize(): void {\n let widthP = 0;\n let heightP = 0;\n\n if (Env.mode === 'browser') {\n const element = this.getElement();\n let widthWithoutPadding = 0;\n let heightWithoutPadding = 0;\n if (element.parentElement) {\n const computedStyle = element.parentElement.style || window.getComputedStyle(element.parentElement); // 兼容性处理\n widthWithoutPadding =\n element.parentElement.offsetWidth -\n parseInt(computedStyle.paddingLeft || '0px', 10) -\n parseInt(computedStyle.paddingRight || '0px', 10);\n heightWithoutPadding =\n element.parentElement.offsetHeight -\n parseInt(computedStyle.paddingTop || '0px', 10) -\n parseInt(computedStyle.paddingBottom || '0px', 20);\n }\n const width1 = (widthWithoutPadding ?? 1) - 1 - this.taskTableWidth;\n const height1 = (heightWithoutPadding ?? 1) - 1;\n\n element.style.width = (width1 && `${width1}px`) || '0px';\n element.style.height = (height1 && `${height1}px`) || '0px';\n\n const { canvas } = this;\n\n widthP = canvas.parentElement?.offsetWidth ?? 1;\n heightP = canvas.parentElement?.offsetHeight ?? 1;\n\n //style 与 width,height相同\n if (this?.scenegraph?.stage) {\n this.scenegraph.stage.resize(widthP, heightP);\n } else {\n canvas.style.width = '';\n canvas.style.height = '';\n canvas.width = widthP;\n canvas.height = heightP;\n\n canvas.style.width = `${widthP}px`;\n canvas.style.height = `${heightP}px`;\n }\n } else if (Env.mode === 'node') {\n // widthP = this.canvasWidth - 1;\n // heightP = this.canvasHeight - 1;\n }\n const width = Math.floor(widthP - getVerticalScrollBarSize(this.parsedOptions.scrollStyle));\n const height = Math.floor(heightP - getHorizontalScrollBarSize(this.parsedOptions.scrollStyle));\n\n this.tableNoFrameWidth = widthP;\n this.tableNoFrameHeight = Math.floor(heightP);\n if (this.parsedOptions.outerFrameStyle) {\n //考虑表格整体边框的问题\n const lineWidth = this.parsedOptions.outerFrameStyle?.borderLineWidth; // toBoxArray(this.parsedOptions.frameStyle?.borderLineWidth ?? [null]);\n this.tableX = this.taskListTableInstance ? this.parsedOptions.verticalSplitLine.lineWidth ?? 0 : lineWidth;\n this.tableY = lineWidth;\n this.tableNoFrameWidth = width - lineWidth - this.parsedOptions.verticalSplitLine.lineWidth;\n\n this.tableNoFrameHeight = height - lineWidth * 2;\n }\n }\n _generateListTable() {\n if (this.taskTableColumns.length >= 1 || this.options?.rowSeriesNumber) {\n const listTableOption = this._generateListTableOptions();\n this.taskListTableInstance = new ListTableSimple(this.container, listTableOption);\n\n if (this.options?.taskListTable?.tableWidth === 'auto') {\n this.taskTableWidth =\n this.taskListTableInstance.getAllColsWidth() + this.parsedOptions.outerFrameStyle.borderLineWidth;\n if (this.options?.taskListTable?.maxTableWidth) {\n this.taskTableWidth = Math.min(this.options?.taskListTable?.maxTableWidth, this.taskTableWidth);\n }\n if (this.options?.taskListTable?.minTableWidth) {\n this.taskTableWidth = Math.max(this.options?.taskListTable?.minTableWidth, this.taskTableWidth);\n }\n this.element.style.left = this.taskTableWidth ? `${this.taskTableWidth}px` : '0px';\n this.taskListTableInstance.setCanvasSize(\n this.taskTableWidth,\n this.tableNoFrameHeight + this.parsedOptions.outerFrameStyle.borderLineWidth * 2\n );\n this._updateSize();\n }\n\n if (this.taskListTableInstance.columnHeaderLevelCount > 1) {\n if (this.taskListTableInstance.columnHeaderLevelCount === this.parsedOptions.timeLineHeaderRowHeights.length) {\n for (let i = 0; i < this.taskListTableInstance.columnHeaderLevelCount; i++) {\n this.taskListTableInstance.setRowHeight(i, this.parsedOptions.timeLineHeaderRowHeights[i]);\n }\n } else {\n const newRowHeight = this.getAllHeaderRowsHeight() / this.taskListTableInstance.columnHeaderLevelCount;\n for (let i = 0; i < this.taskListTableInstance.columnHeaderLevelCount; i++) {\n this.taskListTableInstance.setRowHeight(i, newRowHeight);\n }\n }\n }\n }\n }\n _generateListTableOptions() {\n const listTable_options: ListTableConstructorOptions = {};\n const needPutInListTableKeys = ['container', 'records', 'rowSeriesNumber', 'overscrollBehavior', 'pixelRatio'];\n for (const key in this.options) {\n if (needPutInListTableKeys.indexOf(key) >= 0) {\n listTable_options[key] = this.options[key];\n }\n }\n for (const key in this.options.taskListTable) {\n listTable_options[key] = this.options.taskListTable[key];\n if (key === 'columns') {\n listTable_options[key][listTable_options[key].length - 1].disableColumnResize = true;\n }\n }\n // lineWidthArr[1] = 0;\n listTable_options.theme = Object.assign({}, this.options.taskListTable?.theme, {\n scrollStyle: Object.assign(\n {},\n this.parsedOptions.scrollStyle,\n {\n verticalVisible: 'none'\n },\n this.options.taskListTable?.theme?.scrollStyle\n ),\n headerStyle: Object.assign(\n {},\n themes.DEFAULT.headerStyle,\n {\n bgColor: this.parsedOptions.timelineHeaderBackgroundColor\n },\n this.options.taskListTable?.theme?.headerStyle\n ),\n bodyStyle: Object.assign({}, themes.DEFAULT.bodyStyle, this.options.taskListTable?.theme?.bodyStyle),\n cellInnerBorder: false,\n frameStyle: Object.assign({}, this.parsedOptions.outerFrameStyle, {\n cornerRadius: [\n this.parsedOptions.outerFrameStyle?.cornerRadius ?? 0,\n 0,\n 0,\n this.parsedOptions.outerFrameStyle?.cornerRadius ?? 0\n ],\n borderLineWidth: [\n this.parsedOptions.outerFrameStyle?.borderLineWidth ?? 0,\n 0,\n this.parsedOptions.outerFrameStyle?.borderLineWidth ?? 0,\n this.parsedOptions.outerFrameStyle?.borderLineWidth ?? 0\n ]\n })\n });\n listTable_options.canvasWidth = this.taskTableWidth as number;\n listTable_options.canvasHeight = this.canvas.height;\n listTable_options.defaultHeaderRowHeight = this.getAllHeaderRowsHeight();\n listTable_options.defaultRowHeight = this.parsedOptions.rowHeight;\n listTable_options.clearDOM = false;\n return listTable_options;\n }\n\n /**\n * 获取表格创建的DOM根节点\n */\n getElement(): HTMLElement {\n return this.element;\n }\n\n /**\n * 获取创建gantt传入的容器\n */\n getContainer(): HTMLElement {\n return this.element.parentElement;\n }\n\n _sortScales() {\n const { timelineHeader } = this.options;\n if (timelineHeader) {\n const timelineScales = timelineHeader.scales;\n const sortOrder = ['year', 'quarter', 'month', 'week', 'day'];\n const orderedScales = timelineScales.slice().sort((a, b) => {\n const indexA = sortOrder.indexOf(a.unit);\n const indexB = sortOrder.indexOf(b.unit);\n if (indexA === -1) {\n return 1;\n } else if (indexB === -1) {\n return -1;\n }\n return indexA - indexB;\n });\n const reverseOrderedScales = timelineScales.slice().sort((a, b) => {\n const indexA = sortOrder.indexOf(a.unit);\n const indexB = sortOrder.indexOf(b.unit);\n if (indexA === -1) {\n return 1;\n } else if (indexB === -1) {\n return -1;\n }\n return indexB - indexA;\n });\n\n this.parsedOptions.sortedTimelineScales = orderedScales;\n this.parsedOptions.reverseSortedTimelineScales = reverseOrderedScales;\n }\n }\n\n _generateTimeLineDateMap() {\n const startDate = new Date(this.parsedOptions.minDate);\n const endDate = new Date(this.parsedOptions.maxDate);\n let colWidthIncludeDays = 1000000;\n // Iterate over each scale\n for (const scale of this.parsedOptions.reverseSortedTimelineScales) {\n // Generate the sub-columns for each step within the scale\n const currentDate = new Date(startDate);\n // const timelineDates: any[] = [];\n scale.timelineDates = generateTimeLineDate(currentDate, endDate, scale);\n }\n\n const firstScale = this.parsedOptions.reverseSortedTimelineScales[0];\n const { unit, step } = firstScale;\n if (unit === 'day') {\n colWidthIncludeDays = step;\n } else if (unit === 'month') {\n colWidthIncludeDays = 30;\n } else if (unit === 'week') {\n colWidthIncludeDays = 7;\n } else if (unit === 'quarter') {\n colWidthIncludeDays = 90;\n } else if (unit === 'year') {\n colWidthIncludeDays = 365;\n }\n this.parsedOptions.colWidthPerDay = this.parsedOptions.timelineColWidth / colWidthIncludeDays;\n }\n getAllRowsHeight() {\n return this.getAllHeaderRowsHeight() + this.itemCount * this.parsedOptions.rowHeight;\n }\n getAllHeaderRowsHeight() {\n // if (Array.isArray(this.parsedOptions.timeLineHeaderRowHeights)) {\n return this.parsedOptions.timeLineHeaderRowHeights.reduce((acc, curr, index) => {\n return acc + curr;\n }, 0);\n // }\n // return (this.parsedOptions.timeLineHeaderRowHeights as number) * this.timeLineHeaderLevel;\n }\n getAllColsWidth() {\n return (\n this.parsedOptions.colWidthPerDay *\n (Math.ceil(\n Math.abs(new Date(this.parsedOptions.maxDate).getTime() - new Date(this.parsedOptions.minDate).getTime()) /\n (1000 * 60 * 60 * 24)\n ) +\n 1)\n );\n }\n\n getAllTaskBarsHeight() {\n return this.itemCount * this.parsedOptions.rowHeight;\n }\n\n getRecordByIndex(index: number) {\n if (this.taskListTableInstance) {\n return this.taskListTableInstance.getRecordByRowCol(0, index + this.taskListTableInstance.columnHeaderLevelCount);\n }\n return this.records[index];\n }\n\n refreshTaskBar(index: number) {\n // this.listTableInstance.updateRecords([record], [index]);\n this.scenegraph.taskBar.updateTaskBarNode(index);\n this.scenegraph.updateNextFrame();\n }\n updateRecordToListTable(record: any, index: number) {\n this.taskListTableInstance.updateRecords([record], [index]);\n }\n /**\n * 获取指定index处任务数据的具体信息\n * @param index\n * @returns 当前任务信息\n */\n getTaskInfoByTaskListIndex(index: number): {\n taskRecord: any;\n taskDays: number;\n startDate: Date;\n endDate: Date;\n progress: number;\n } {\n const taskRecord = this.getRecordByIndex(index);\n const startDateField = this.parsedOptions.startDateField;\n const endDateField = this.parsedOptions.endDateField;\n const progressField = this.parsedOptions.progressField;\n const rawDateStartDateTime = new Date(taskRecord[startDateField]).getTime();\n const rawDateEndDateTime = new Date(taskRecord[endDateField]).getTime();\n if (\n rawDateEndDateTime < this.parsedOptions._minDateTime ||\n rawDateStartDateTime > this.parsedOptions._maxDateTime\n ) {\n return {\n taskDays: 0,\n progress: 0,\n startDate: null,\n endDate: null,\n taskRecord\n };\n }\n const startDate = new Date(\n Math.min(Math.max(this.parsedOptions._minDateTime, rawDateStartDateTime), this.parsedOptions._maxDateTime)\n );\n const endDate = new Date(\n Math.max(Math.min(this.parsedOptions._maxDateTime, rawDateEndDateTime), this.parsedOptions._minDateTime)\n );\n const progress = convertProgress(taskRecord[progressField]);\n const taskDays = Math.ceil(Math.abs(endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)) + 1;\n return {\n taskRecord,\n taskDays,\n startDate,\n endDate,\n progress\n };\n }\n /**\n * 拖拽任务条或者调整任务条尺寸修改日期更新到数据中\n * @param updateDateType\n * @param days\n * @param index\n */\n _updateDateToTaskRecord(updateDateType: 'move' | 'start-move' | 'end-move', days: number, index: number) {\n const taskRecord = this.getRecordByIndex(index);\n const startDateField = this.parsedOptions.startDateField;\n const endDateField = this.parsedOptions.endDateField;\n const dateFormat = parseDateFormat(taskRecord[startDateField]);\n const startDate = new Date(taskRecord[startDateField]);\n const endDate = new Date(taskRecord[endDateField]);\n if (updateDateType === 'move') {\n const newStartDate = formatDate(new Date(days * DayTimes + startDate.getTime()), dateFormat);\n const newEndDate = formatDate(new Date(days * DayTimes + endDate.getTime()), dateFormat);\n taskRecord[startDateField] = newStartDate;\n taskRecord[endDateField] = newEndDate;\n } else if (updateDateType === 'start-move') {\n const newStartDate = formatDate(new Date(days * DayTimes + startDate.getTime()), dateFormat);\n taskRecord[startDateField] = newStartDate;\n } else if (updateDateType === 'end-move') {\n const newEndDate = formatDate(new Date(days * DayTimes + endDate.getTime()), dateFormat);\n taskRecord[endDateField] = newEndDate;\n }\n this.updateRecordToListTable(taskRecord, index);\n }\n /** TODO */\n updateTaskRecord(record: any, index: number) {\n //const taskRecord = this.getRecordByIndex(index);\n this.updateRecordToListTable(record, index);\n this.refreshTaskBar(index);\n }\n\n /**\n * 设置像数比\n * @param pixelRatio\n */\n setPixelRatio(pixelRatio: number) {\n this.parsedOptions.pixelRatio = pixelRatio;\n this.scenegraph.setPixelRatio(pixelRatio);\n }\n\n _resize() {\n this._updateSize();\n this.taskListTableInstance.setCanvasSize(\n this.taskTableWidth,\n this.tableNoFrameHeight + this.parsedOptions.outerFrameStyle.borderLineWidth * 2\n );\n this._syncPropsFromTable();\n this.scenegraph.resize();\n updateSplitLineAndResizeLine(this);\n }\n _syncPropsFromTable() {\n this.itemCount = this.taskListTableInstance\n ? this.taskListTableInstance.rowCount - this.taskListTableInstance.columnHeaderLevelCount\n : this.records.length;\n this.headerHeight = this.getAllHeaderRowsHeight();\n this.drawHeight = Math.min(\n this.headerHeight + this.parsedOptions.rowHeight * this.itemCount,\n this.tableNoFrameHeight\n );\n this.gridHeight = this.drawHeight - this.headerHeight;\n }\n /** 获取绘制画布的canvas上下文 */\n getContext(): CanvasRenderingContext2D {\n return this.context;\n }\n\n release(): void {\n super.release?.();\n this.eventManager.release();\n this.taskListTableInstance?.release();\n const { parentElement } = this.element;\n if (parentElement) {\n parentElement.removeChild(this.element);\n this.verticalSplitResizeLine && parentElement.removeChild(this.verticalSplitResizeLine);\n this.horizontalSplitLine && parentElement.removeChild(this.horizontalSplitLine);\n }\n this.scenegraph = null;\n }\n setRecords(records: any[]) {\n this.records = records;\n this.taskListTableInstance.setRecords(records);\n this._syncPropsFromTable();\n this.verticalSplitResizeLine.style.height = this.drawHeight + 'px'; //'100%';\n this.scenegraph.refreshTaskBarsAndGrid();\n const left = this.stateManager.scroll.horizontalBarPos;\n const top = this.stateManager.scroll.verticalBarPos;\n this.scenegraph.setX(-left);\n this.scenegraph.setY(-top);\n }\n updateScales(scales: ITimelineScale[]) {\n const gantt = this;\n this.options.timelineHeader.scales = scales;\n this._sortScales();\n initOptions(gantt);\n this._generateTimeLineDateMap();\n this.timeLineHeaderLevel = this.parsedOptions.sortedTimelineScales.length;\n this.scenegraph.refreshAll();\n updateSplitLineAndResizeLine(this);\n if (this.taskListTableInstance) {\n if (this.taskListTableInstance.columnHeaderLevelCount === this.parsedOptions.timeLineHeaderRowHeights.length) {\n for (let i = 0; i < this.taskListTableInstance.columnHeaderLevelCount; i++) {\n this.taskListTableInstance.setRowHeight(i, this.parsedOptions.timeLineHeaderRowHeights[i]);\n }\n } else {\n const newRowHeight = this.getAllHeaderRowsHeight() / this.taskListTableInstance.columnHeaderLevelCount;\n for (let i = 0; i < this.taskListTableInstance.columnHeaderLevelCount; i++) {\n this.taskListTableInstance.setRowHeight(i, newRowHeight);\n }\n }\n }\n }\n /** 滚动到scrollToMarkLineDate所指向的日期 */\n _scrollToMarkLine() {\n if (this.parsedOptions.scrollToMarkLineDate) {\n const minDate = this.parsedOptions.minDate;\n const targetDayDistance =\n ((this.parsedOptions.scrollToMarkLineDate.getTime() - minDate.getTime()) / (1000 * 60 * 60 * 24)) *\n this.parsedOptions.colWidthPerDay;\n const left = targetDayDistance - this.tableNoFrameWidth / 2;\n this.stateManager.setScrollLeft(left);\n }\n }\n}\n"]}
@@ -0,0 +1 @@
1
+
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=Menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Menu.ts"],"names":[],"mappings":"","file":"Menu.js","sourcesContent":["// import { createElement } from '../tools/dom';\n// import { importStyle } from './MenuElementStyle';\n// importStyle();\n\n// const CLASSNAME = 'vtable__menu-element';\n// const ITEM_CLASSNAME = `${CLASSNAME}__item`;\n// const CONTENT_CLASSNAME = `${CLASSNAME}__content`;\n// const HIDDEN_CLASSNAME = `${CLASSNAME}--hidden`;\n// const SHOWN_CLASSNAME = `${CLASSNAME}--shown`;\n// const NORAML_CLASSNAME = `${CLASSNAME}--normal`;\n// const SELECT_CLASSNAME = `${CLASSNAME}--select`;\n// const ICOM_CLASSNAME = `${CLASSNAME}__icon`;\n// const SPLIT_CLASSNAME = `${CLASSNAME}__split`;\n// const TITLE_CLASSNAME = `${CLASSNAME}__title`;\n// const ARROW_CLASSNAME = `${CLASSNAME}__arrow`;\n// const NOEVENT_CLASSNAME = `${CLASSNAME}__no-event`;\n// const ITEMTEXT_CLASSNAME = `${CLASSNAME}__item-text`;\n// function createMenuDomElement(): HTMLElement {\n// const rootElement = createElement('div', [CLASSNAME, HIDDEN_CLASSNAME]);\n// return rootElement;\n// }\n// export class MenuElement {\n// private _handler: EventHandler;\n// private _rootElement?: HTMLElement;\n// private _secondElement?: HTMLElement;\n// private _menuInstanceInfo?: MenuInstanceInfo;\n// private _showChildrenIndex: number;\n// private _mouseEnterSecondElement: boolean;\n// constructor(table: BaseTableAPI) {\n// this._handler = new EventHandler();\n// this._rootElement = createMenuDomElement();\n// this._secondElement = createMenuDomElement();\n// (this._secondElement as any).sub = true;\n// this._showChildrenIndex = -1;\n\n// // 鼠标在菜单上滚动阻止冒泡\n// this._rootElement.addEventListener('wheel', e => {\n// e.stopPropagation();\n// });\n// // 绑定交互事件\n// this._rootElement?.addEventListener('mousedown', e => {\n// e.stopPropagation();\n// e.preventDefault();\n// });\n// // 在移动端_rootElement的click事件在表格的touchend事件后触发,\n// // 表格的touchend事件会引发selecter.start,从而清空菜单\n// // 这样就会导致_rootElement的click事件无法触发\n// // 因此菜_rootElement监听touchend事件,在表格的touchend事件前触发\n// // 执行菜单点击功能\n// this._rootElement?.addEventListener('touchend', e => {\n// e.stopPropagation();\n// e.preventDefault();\n// if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n// return;\n// }\n// // console.log('menu mousedown', e);\n// // 触发菜单条目点击事件\n// const { col, row, dropDownIndex, menuKey, text, hasChildren } = e.target as any;\n// if (typeof dropDownIndex !== 'number' || hasChildren) {\n// e.stopPropagation();\n// return;\n// }\n// // const field = table.getHeaderField(col, row);\n// const field = table.isPivotTable()\n// ? (table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row)\n// : table.getHeaderField(col, row);\n\n// const highlight = table._dropDownMenuIsHighlight(col, row, dropDownIndex);\n// table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLICK, {\n// col,\n// row,\n// field: <string>field,\n// menuKey,\n// // fieldKey,\n// // dropDownIndex,\n// text,\n// highlight,\n// cellLocation: table.getCellLocation(col, row),\n// event: e\n// });\n\n// // table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n// // table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null); // 清除菜单\n// e.stopPropagation();\n// });\n// this._rootElement?.addEventListener('click', e => {\n// e.stopPropagation();\n// e.preventDefault();\n// if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n// return;\n// }\n// // console.log('menu mousedown', e);\n// // 触发菜单条目点击事件\n// const { col, row, dropDownIndex, menuKey, text, hasChildren } = e.target as any;\n// if (typeof dropDownIndex !== 'number' || hasChildren) {\n// e.stopPropagation();\n// return;\n// }\n// const field = table.isPivotTable()\n// ? (table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row)\n// : table.getHeaderField(col, row);\n\n// const highlight = table._dropDownMenuIsHighlight(col, row, dropDownIndex);\n// table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLICK, {\n// col,\n// row,\n// field: <string>field,\n// menuKey,\n// text,\n// highlight,\n// cellLocation: table.getCellLocation(col, row),\n// event: e\n// });\n\n// // table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n// // table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null); // 清除菜单\n// e.stopPropagation();\n// });\n// this._rootElement?.addEventListener('mousemove', e => {\n// if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n// return;\n// }\n\n// e.stopPropagation();\n\n// // 处理二级菜单\n// const { hasChildren, dropDownIndex, col, row, sub } = e.target as any;\n// if (hasChildren) {\n// // 更新二级菜单\n// this._showChildrenIndex = dropDownIndex;\n// const secondElement = this._secondElement;\n// secondElement?.classList.remove(HIDDEN_CLASSNAME);\n// secondElement?.classList.add(SHOWN_CLASSNAME);\n// secondElement.innerHTML = '';\n\n// // 添加item\n// const children = (this._menuInstanceInfo.content[dropDownIndex] as any)?.children;\n// for (let i = 0; i < children.length; i++) {\n// const menuItem = children[i];\n// const isHighlight = table.stateManager.menu.dropDownMenuHighlight\n// ? isMenuHighlight(\n// table,\n// table.stateManager.menu.dropDownMenuHighlight,\n// typeof menuItem === 'object' ? menuItem?.menuKey || menuItem?.text : menuItem,\n// col,\n// row,\n// i\n// )\n// : false;\n\n// const item = createItem(menuItem, isHighlight) as any;\n// // dom绑定相关属性\n// item.col = col;\n// item.row = row;\n// item.dropDownIndex = i;\n// if (typeof menuItem === 'string') {\n// item.text = menuItem;\n// item.menuKey = menuItem;\n// } else if (typeof menuItem === 'object') {\n// item.text = menuItem.text;\n// item.menuKey = menuItem.menuKey || menuItem.text;\n// }\n// item.sub = true;\n// item.sub = true;\n// secondElement.appendChild(item);\n// }\n\n// // 对齐菜单位置\n// const rect = (e.target as any).getBoundingClientRect();\n// this._bindSecondElement(table, col, row, rect.right, rect.top);\n// } else if (hasChildren && this._showChildrenIndex === dropDownIndex) {\n// const secondElement = this._secondElement;\n// secondElement?.classList.remove(HIDDEN_CLASSNAME);\n// secondElement?.classList.add(SHOWN_CLASSNAME);\n// } else if (!sub && this._secondElement?.classList.contains(SHOWN_CLASSNAME)) {\n// setTimeout(() => {\n// //因为增加了主菜单和子菜单的间距 鼠标在移入子菜单的过程中 可能引起子菜单消失 这里增加延时处理\n// if (this._mouseEnterSecondElement !== true) {\n// this._showChildrenIndex = -1;\n// const secondElement = this._secondElement;\n// secondElement?.classList.remove(SHOWN_CLASSNAME);\n// secondElement?.classList.add(HIDDEN_CLASSNAME);\n// }\n// }, 300);\n// }\n// });\n\n// // 鼠标在菜单上滚动阻止冒泡\n// this._secondElement?.addEventListener('wheel', e => {\n// e.stopPropagation();\n// });\n// this._secondElement?.addEventListener('mousemove', e => {\n// if (this._rootElement.classList.contains(HIDDEN_CLASSNAME)) {\n// return;\n// }\n// // console.log('menu mousemove', e);\n// // table.hoverIcon = undefined;\n\n// e.stopPropagation();\n// });\n// this._secondElement?.addEventListener('mouseenter', e => {\n// this._mouseEnterSecondElement = true;\n// });\n// this._secondElement?.addEventListener('mouseleave', e => {\n// this._mouseEnterSecondElement = false;\n// });\n// this._secondElement?.addEventListener('mousedown', e => {\n// e.stopPropagation();\n// e.preventDefault();\n// });\n// this._secondElement?.addEventListener('click', e => {\n// e.stopPropagation();\n// e.preventDefault();\n// if (this._secondElement.classList.contains(HIDDEN_CLASSNAME)) {\n// return;\n// }\n// // 触发菜单条目点击事件\n// const { col, row, dropDownIndex, menuKey, text, hasChildren } = e.target as any;\n// if (typeof dropDownIndex !== 'number' || hasChildren) {\n// e.stopPropagation();\n// return;\n// }\n// const field = table.isPivotTable()\n// ? (table.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row)\n// : table.getHeaderField(col, row);\n// let highlight = false;\n// const menus = <MenuListItem[]>this._menuInstanceInfo.content;\n// menus.forEach((menu, i) => {\n// if (typeof menu === 'object' && menu.children && menu.children.length) {\n// for (let j = 0; j < menu.children.length; j++) {\n// const childItem = menu.children[j];\n// if (\n// isMenuHighlight(\n// table,\n// table.stateManager.menu.dropDownMenuHighlight,\n// typeof childItem === 'object' ? childItem?.menuKey : childItem,\n// col,\n// row,\n// -1\n// ) &&\n// menuKey === (typeof childItem === 'object' ? childItem?.menuKey : childItem)\n// ) {\n// highlight = true;\n// return;\n// }\n// }\n// }\n// });\n\n// table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLICK, {\n// col,\n// row,\n// field: <string>field,\n// cellHeaderPaths: table.isPivotTable() ? table.getCellHeaderPaths(col, row) : undefined,\n// menuKey,\n// text,\n// highlight,\n// cellLocation: table.getCellLocation(col, row),\n// event: e\n// });\n\n// table.fireListeners(TABLE_EVENT_TYPE.DROPDOWN_MENU_CLEAR, null); // 清除菜单\n// table.fireListeners(TABLE_EVENT_TYPE.HIDE_MENU, null); // 清除菜单\n// e.stopPropagation();\n// });\n// }\n// get rootElement() {\n// return this._rootElement;\n// }\n// release(): void {\n// this.unbindFromCell();\n\n// const rootElement = this._rootElement;\n// if (rootElement?.parentElement) {\n// rootElement.parentElement.removeChild(rootElement);\n// }\n\n// this._handler.release();\n// delete this._rootElement;\n// }\n// bindToCell(table: BaseTableAPI, col: number, row: number, menuInstanceInfo: MenuInstanceInfo): boolean {\n// const rootElement = this._rootElement;\n// const secondElement = this._secondElement;\n// this._menuInstanceInfo = menuInstanceInfo;\n\n// rootElement?.classList.remove(SHOWN_CLASSNAME);\n// rootElement?.classList.add(HIDDEN_CLASSNAME);\n// secondElement?.classList.remove(SHOWN_CLASSNAME);\n// secondElement?.classList.add(HIDDEN_CLASSNAME);\n\n// if (this._canBindToCell(table, col, row)) {\n// // 生成下拉菜单dom\n// rootElement.innerHTML = '';\n\n// if (Array.isArray(menuInstanceInfo.content)) {\n// const menuListItem = menuInstanceInfo.content;\n// for (let i = 0; i < menuListItem?.length ?? 0; i++) {\n// const menuItem = menuListItem[i];\n// let isHighlight = table.stateManager.menu.dropDownMenuHighlight\n// ? isMenuHighlight(\n// table,\n// table.stateManager.menu.dropDownMenuHighlight,\n// typeof menuItem === 'object' ? menuItem?.menuKey || menuItem?.text : menuItem,\n// col,\n// row,\n// i\n// )\n// : false;\n\n// if (\n// table.stateManager.menu.dropDownMenuHighlight &&\n// typeof menuItem === 'object' &&\n// Array.isArray(menuItem.children) &&\n// menuItem.children.length\n// ) {\n// // 判断子项目是否高亮\n// for (let i = 0; i < menuItem.children.length; i++) {\n// const childItem = menuItem.children[i];\n// // eslint-disable-next-line max-depth\n// if (\n// isMenuHighlight(\n// table,\n// table.stateManager.menu.dropDownMenuHighlight,\n// typeof childItem === 'object' ? childItem?.menuKey || childItem?.text : childItem,\n// col,\n// row,\n// i\n// )\n// ) {\n// isHighlight = true;\n// break;\n// }\n// }\n// }\n\n// const item = createItem(menuItem, isHighlight) as any;\n// // dom绑定相关属性\n// item.col = col;\n// item.row = row;\n// item.dropDownIndex = i;\n// if (typeof menuItem === 'string') {\n// item.text = menuItem;\n// item.menuKey = menuItem;\n// } else if (typeof menuItem === 'object') {\n// item.text = menuItem.text;\n// item.menuKey = menuItem.menuKey || menuItem.text;\n// if (menuItem.children?.length) {\n// item.hasChildren = true;\n// }\n// }\n// rootElement.appendChild(item);\n// }\n// }\n// const binded = this._bindToCell(table, col, row, menuInstanceInfo.position, menuInstanceInfo.referencePosition);\n\n// if (binded) {\n// rootElement?.classList.add(SHOWN_CLASSNAME);\n// rootElement?.classList.remove(HIDDEN_CLASSNAME);\n// return true;\n// }\n// } else {\n// this.unbindFromCell();\n// }\n// return false;\n// }\n// unbindFromCell(): void {\n// const rootElement = this._rootElement;\n// const secondElement = this._secondElement;\n// this._menuInstanceInfo = undefined;\n// if (rootElement?.parentElement) {\n// rootElement.classList.remove(SHOWN_CLASSNAME);\n// rootElement.classList.add(HIDDEN_CLASSNAME);\n// }\n// if (secondElement?.parentElement) {\n// secondElement.classList.remove(SHOWN_CLASSNAME);\n// secondElement.classList.add(HIDDEN_CLASSNAME);\n// }\n// }\n// _canBindToCell(table: BaseTableAPI, col: number, row: number): boolean {\n// const rect = table.getCellRangeRelativeRect({ col, row });\n// const element = table.getElement();\n// const { top, bottom, left, right } = rect;\n// if (table.isFrozenCell(col, row)) {\n// return true;\n// } else if (\n// bottom < table.getFrozenRowsHeight() ||\n// right < table.getFrozenColsWidth() ||\n// left > table.tableNoFrameWidth - table.getRightFrozenColsWidth() ||\n// top > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight()\n// ) {\n// // 范围外\n// return false;\n// }\n// const { offsetHeight, offsetWidth } = element;\n// if (offsetHeight < top) {\n// return false;\n// }\n// if (offsetWidth < left) {\n// return false;\n// }\n// return true;\n// }\n// _bindToCell(\n// table: BaseTableAPI,\n// col: number,\n// row: number,\n// position?: { x: number; y: number },\n// referencePosition?: { rect: RectProps; placement?: Placement }\n// ): boolean {\n// const rootElement = this._rootElement;\n// const element = table.getElement();\n// const { width: containerWidth, height: containerHeight } = table.internalProps.element.getBoundingClientRect();\n// if (rootElement) {\n// if (rootElement.parentElement !== element) {\n// element.appendChild(rootElement); // 之前在做dom边缘躲避的时候放到了table.getParentElement()上,但发现不是相对定位导致位置错位\n// }\n// rootElement.style.left = `0px`;\n// //设置最宽尺寸\n// const maxWidth = containerWidth * 0.8;\n// rootElement.style.maxWidth = `${maxWidth}px`;\n// //计算弹出框的宽度\n// const rootElementWidth = rootElement.clientWidth;\n// const rootElementHeight = rootElement.clientHeight;\n// let rootElementLeft;\n// let rootElementTop;\n// if (position) {\n// rootElementLeft = position.x;\n// rootElementTop = position.y;\n// } else if (referencePosition) {\n// rootElementLeft = referencePosition.rect.right - rootElementWidth;\n// rootElementTop = referencePosition.rect.bottom;\n// }\n// // rootElementLeft = position.x - rootElementWidth;\n// // let leftStyle = rootElementLeft;\n// // 检测下方能否容纳,不能容纳向上偏移\n// if (rootElementTop + rootElementHeight > containerHeight) {\n// rootElementTop = containerHeight - rootElementHeight;\n// // rootElementLeft += rootElementWidth - 2;\n// }\n// // 偏移后上方超出canvas范围,居中显示\n// if (rootElementTop < 0) {\n// rootElementTop = rootElementTop / 2;\n// }\n// rootElement.style.top = `${rootElementTop}px`;\n\n// // 判断如果超出左右范围则靠边显示\n// if (rootElementLeft < 0) {\n// rootElementLeft = 0;\n// } else if (rootElementLeft + rootElementWidth > containerWidth) {\n// rootElementLeft = containerWidth - rootElementWidth;\n// }\n// rootElement.style.left = `${rootElementLeft}px`;\n\n// return true;\n// }\n// return false;\n// }\n// _bindSecondElement(table: BaseTableAPI, col: number, row: number, x: number, y: number): boolean {\n// const secondElement = this._secondElement;\n// const rootElement = this._rootElement;\n// const element = table.getElement();\n// const {\n// width: containerWidth,\n// left: containerLeft,\n// top: containerTop\n// } = table.internalProps.element.getBoundingClientRect();\n// const { x: rootLeft, y: rootTop, width: rootWidth } = rootElement.getBoundingClientRect();\n\n// if (secondElement) {\n// // if (secondElement.parentElement !== rootElement) {\n// // rootElement.appendChild(secondElement);\n// // }\n// if (secondElement.parentElement !== element) {\n// element.appendChild(secondElement);\n// }\n\n// secondElement.style.left = `0px`;\n// //设置最宽尺寸\n// const maxWidth = containerWidth * 0.8;\n// secondElement.style.maxWidth = `${maxWidth}px`;\n// //计算弹出框的宽度\n// const secondElementWidth = secondElement.clientWidth;\n// // const secondElementHeight = secondElement.clientHeight;\n\n// const secondElementTop = y - 4 - containerTop;\n// const secondElementLeft = x - containerLeft;\n\n// secondElement.style.top = `${secondElementTop}px`;\n// let leftStyle = secondElementLeft;\n\n// // 判断如果超出右范围则靠左边显示\n// if (leftStyle + secondElementWidth > containerWidth) {\n// leftStyle = leftStyle - secondElementWidth - rootWidth;\n// } else {\n// leftStyle += 4; //位置调整 需要和主菜单之间有4px的间隔\n// }\n// secondElement.style.left = `${leftStyle}px`;\n\n// return true;\n// }\n// return false;\n// }\n// /** 鼠标坐标位置 是否位于下拉菜单内 */\n// pointInMenuElement(x: number, y: number): boolean {\n// const rootElement = this._rootElement;\n\n// const { x: rootLeft, y: rootTop, width: rootWidth, height: rootHeight } = rootElement.getBoundingClientRect();\n// if (x > rootLeft - 5 && x < rootLeft + rootWidth + 5 && y > rootTop - 5 && y < rootTop + rootHeight + 5) {\n// return true;\n// }\n// const secondElement = this._secondElement;\n// if (secondElement) {\n// const {\n// x: secondLeft,\n// y: secondTop,\n// width: secondWidth,\n// height: secondHeight\n// } = rootElement.getBoundingClientRect();\n// if (\n// x > secondLeft - 5 &&\n// x < secondLeft + secondWidth + 5 &&\n// y > secondTop - 5 &&\n// y < secondTop + secondHeight + 5\n// ) {\n// return true;\n// }\n// }\n// return false;\n// }\n// }\n\n// function createItem(info: MenuListItem, isHighlight: boolean): HTMLDivElement {\n// const itemContainer = createElement('div', [\n// ITEM_CLASSNAME,\n// isHighlight ? SELECT_CLASSNAME : NORAML_CLASSNAME\n// ]) as HTMLDivElement;\n\n// if (typeof info === 'string') {\n// const item = createElement('span', [CONTENT_CLASSNAME, NOEVENT_CLASSNAME, ITEMTEXT_CLASSNAME]);\n// item.innerHTML = info;\n// itemContainer.appendChild(item);\n// } else if (typeof info === 'object') {\n// const type = info.type ?? 'item';\n// if (type === 'split') {\n// itemContainer?.classList.add(SPLIT_CLASSNAME);\n// return itemContainer;\n// }\n// if (info?.icon?.svg) {\n// if (regUrl.test(info.icon.svg)) {\n// const image = new Image();\n// if (info.icon.width) {\n// image.style.width = info.icon.width.toString() + 'px';\n// } else {\n// image.style.width = '16px';\n// }\n// if (info.icon.height) {\n// image.style.height = info.icon.height.toString() + 'px';\n// } else {\n// image.style.height = '16px';\n// }\n// image.src = info.icon.svg;\n// itemContainer.appendChild(image);\n// } else {\n// const svg = createElement('span', [ICOM_CLASSNAME, NOEVENT_CLASSNAME]);\n// svg.innerHTML =\n// isHighlight && info.selectedIcon && info.selectedIcon.svg ? info.selectedIcon.svg : info.icon.svg;\n// info.icon.width && (svg.children[0] as SVGElement).setAttribute('width', info.icon.width.toString());\n// info.icon.height && (svg.children[0] as SVGElement).setAttribute('height', info.icon.height.toString());\n// itemContainer.appendChild(svg);\n// }\n// }\n// const item = createElement('span', [CONTENT_CLASSNAME, NOEVENT_CLASSNAME, ITEMTEXT_CLASSNAME]);\n// item.innerHTML = info.text;\n// itemContainer.appendChild(item);\n// if (type === 'title') {\n// itemContainer?.classList.add(NOEVENT_CLASSNAME, TITLE_CLASSNAME);\n// } else if (info?.children?.length) {\n// const arrow = createElement('span', [CONTENT_CLASSNAME, NOEVENT_CLASSNAME, ARROW_CLASSNAME]);\n// arrow.innerHTML = isHighlight\n// ? '<svg width=\"8\" height=\"12\" viewBox=\"0 0 10 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"vertical-align: baseline\"><path d=\"M1.78186 16.7729L0.300378 15.2915L6.8189 8.77295L0.300377 2.25443L1.78186 0.77295L9.78186 8.77295L1.78186 16.7729Z\" fill=\"#2E68CF\" fill-opacity=\"0.65\"></path></svg>'\n// : '<svg width=\"8\" height=\"12\" viewBox=\"0 0 10 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"vertical-align: baseline\"><path d=\"M1.78186 16.7729L0.300378 15.2915L6.8189 8.77295L0.300377 2.25443L1.78186 0.77295L9.78186 8.77295L1.78186 16.7729Z\" fill=\"#141414\" fill-opacity=\"0.65\"></path></svg>';\n// itemContainer.appendChild(arrow);\n// }\n// }\n// return itemContainer;\n// }\n"]}
@@ -0,0 +1 @@
1
+ export declare function importStyle(): void;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ function importStyle() {
4
+ const styleElement = document.createElement("style");
5
+ styleElement.id = "vtable-menu-styleSheet", styleElement.textContent = "\n@keyframes vtable__menu-element--shown-animation {\n\t0% {\n\t\topacity: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t}\n}\n.vtable__menu-element {\n\tposition: absolute;\n\tbox-sizing: border-box;\n\tborder-radius: 4px;\n\tbackground-color: #fff;\n\tpadding: 6px 0;\n\t/* pointer-events: none; */\n\tuser-select: none;\n\tcolor: #000;\n\tmax-width: 300px;\n\tz-index: 99999;\n\tborder: #CCC 0.5px solid;\n\tcursor: default;\n\twidth: max-content;\n\tbox-shadow: 0px 8px 16px rgba(27, 31, 35, 0.12);\n}\n.vtable__menu-element--hidden {\n\topacity: 0;\n\t/* transform: translate(-50%, -50%); */\n\ttransition: opacity 75ms linear;\n\tz-index: -9999;\n}\n.vtable__menu-element--shown {\n\topacity: 1;\n\t/* transform: translate(-50%, -50%); */\n\tanimation: vtable__menu-element--shown-animation 150ms ease-out;\n}\n.vtable__menu-element__content {\n\tfont-family: Roboto;\n\tfont-size: 12px;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\t/* height: 100%; */\n\tline-height: 30px;\n}\n.vtable__menu-element__item {\n\theight: 32px;\n\tpadding: 0px 12px;\n\tcursor: pointer;\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-start;\n}\n.vtable__menu-element__item:hover {\n\tbackground-color: rgba(27, 31, 35, 0.06);\n}\n.vtable__menu-element__icon{\n\t/* vertical-align: top; */\n\tdisplay: flex;\n\t/* line-height: 30px; */\n\tmargin-right: 6px;\n}\n.vtable__menu-element__no-event {\n\tpointer-events: none;\n}\n.vtable__menu-element--select {\n\tcolor: #2E68CF;\n}.vtable__menu-element--normal {\n\tcolor: rgba(20, 20, 20, 0.9);;\n}\n.vtable__menu-element__split {\n\theight: 0px;\n\tborder: 1px solid rgb(209, 213, 218);\n\tmargin: 5px 0;\n}\n.vtable__menu-element__title {\n\tcolor: rgb(149, 149, 149);\n}\n.vtable__menu-element__arrow {\n\tposition: absolute;\n\tright: 3px;\n\tfont-weight: bold;\n\tmargin-top: 1px;\n}\n.vtable__menu-element__item-text {\n\tmargin-right: 15px;\n}\n",
6
+ document.head.appendChild(styleElement);
7
+ }
8
+
9
+ Object.defineProperty(exports, "__esModule", {
10
+ value: !0
11
+ }), exports.importStyle = void 0, exports.importStyle = importStyle;
12
+ //# sourceMappingURL=MenuElementStyle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/MenuElementStyle.ts"],"names":[],"mappings":";;;AAAA,SAAgB,WAAW;IACzB,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,GAAG,wBAAwB,CAAC;IAC3C,YAAY,CAAC,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuF5B,CAAC;IAEA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC1C,CAAC;AA7FD,kCA6FC","file":"MenuElementStyle.js","sourcesContent":["export function importStyle() {\n const styleElement = document.createElement('style');\n styleElement.id = 'vtable-menu-styleSheet';\n styleElement.textContent = `\n@keyframes vtable__menu-element--shown-animation {\n\t0% {\n\t\topacity: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t}\n}\n.vtable__menu-element {\n\tposition: absolute;\n\tbox-sizing: border-box;\n\tborder-radius: 4px;\n\tbackground-color: #fff;\n\tpadding: 6px 0;\n\t/* pointer-events: none; */\n\tuser-select: none;\n\tcolor: #000;\n\tmax-width: 300px;\n\tz-index: 99999;\n\tborder: #CCC 0.5px solid;\n\tcursor: default;\n\twidth: max-content;\n\tbox-shadow: 0px 8px 16px rgba(27, 31, 35, 0.12);\n}\n.vtable__menu-element--hidden {\n\topacity: 0;\n\t/* transform: translate(-50%, -50%); */\n\ttransition: opacity 75ms linear;\n\tz-index: -9999;\n}\n.vtable__menu-element--shown {\n\topacity: 1;\n\t/* transform: translate(-50%, -50%); */\n\tanimation: vtable__menu-element--shown-animation 150ms ease-out;\n}\n.vtable__menu-element__content {\n\tfont-family: Roboto;\n\tfont-size: 12px;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\t/* height: 100%; */\n\tline-height: 30px;\n}\n.vtable__menu-element__item {\n\theight: 32px;\n\tpadding: 0px 12px;\n\tcursor: pointer;\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-start;\n}\n.vtable__menu-element__item:hover {\n\tbackground-color: rgba(27, 31, 35, 0.06);\n}\n.vtable__menu-element__icon{\n\t/* vertical-align: top; */\n\tdisplay: flex;\n\t/* line-height: 30px; */\n\tmargin-right: 6px;\n}\n.vtable__menu-element__no-event {\n\tpointer-events: none;\n}\n.vtable__menu-element--select {\n\tcolor: #2E68CF;\n}.vtable__menu-element--normal {\n\tcolor: rgba(20, 20, 20, 0.9);;\n}\n.vtable__menu-element__split {\n\theight: 0px;\n\tborder: 1px solid rgb(209, 213, 218);\n\tmargin: 5px 0;\n}\n.vtable__menu-element__title {\n\tcolor: rgb(149, 149, 149);\n}\n.vtable__menu-element__arrow {\n\tposition: absolute;\n\tright: 3px;\n\tfont-weight: bold;\n\tmargin-top: 1px;\n}\n.vtable__menu-element__item-text {\n\tmargin-right: 15px;\n}\n`;\n\n document.head.appendChild(styleElement);\n}\n"]}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.EventManager = void 0;
6
6
 
7
- const vtable_1 = require("@visactor/vtable"), EventHandler_1 = require("../event/EventHandler"), scroll_1 = require("../event/scroll"), ts_types_1 = require("../ts-types"), vutils_1 = require("@visactor/vutils"), pixel_ratio_1 = require("../tools/pixel-ratio"), gantt_helper_1 = require("../gantt-helper");
7
+ const vrender_1 = require("@visactor/vtable/es/vrender"), EventHandler_1 = require("../event/EventHandler"), scroll_1 = require("../event/scroll"), ts_types_1 = require("../ts-types"), vutils_1 = require("@visactor/vutils"), pixel_ratio_1 = require("../tools/pixel-ratio"), gantt_helper_1 = require("../gantt-helper");
8
8
 
9
9
  class EventManager {
10
10
  constructor(gantt) {
@@ -25,9 +25,9 @@ function bindTableGroupListener(event) {
25
25
  scene.tableGroup.addEventListener("pointerdown", (e => {
26
26
  if (poniterState = "down", 0 !== e.button) return;
27
27
  const taskBarTarget = e.detailPath.find((pathNode => "task-bar" === pathNode.name));
28
- taskBarTarget && ("task-bar-hover-shadow-left-icon" === e.target.name ? (stateManager.startResizeTaskBar(taskBarTarget, e.nativeEvent.x, e.nativeEvent.y, "left"),
29
- stateManager.updateInteractionState(ts_types_1.InteractionState.grabing)) : "task-bar-hover-shadow-right-icon" === e.target.name ? (stateManager.startResizeTaskBar(taskBarTarget, e.nativeEvent.x, e.nativeEvent.y, "right"),
30
- stateManager.updateInteractionState(ts_types_1.InteractionState.grabing)) : gantt.parsedOptions.taskBarMoveable && (stateManager.startMoveTaskBar(taskBarTarget, e.nativeEvent.x, e.nativeEvent.y),
28
+ taskBarTarget && ("task-bar-hover-shadow-left-icon" === e.target.name ? (stateManager.startResizeTaskBar(taskBarTarget, e.nativeEvent.x, e.nativeEvent.y, e.offset.y, "left"),
29
+ stateManager.updateInteractionState(ts_types_1.InteractionState.grabing)) : "task-bar-hover-shadow-right-icon" === e.target.name ? (stateManager.startResizeTaskBar(taskBarTarget, e.nativeEvent.x, e.nativeEvent.y, e.offset.y, "right"),
30
+ stateManager.updateInteractionState(ts_types_1.InteractionState.grabing)) : gantt.parsedOptions.taskBarMoveable && (stateManager.startMoveTaskBar(taskBarTarget, e.nativeEvent.x, e.nativeEvent.y, e.offset.y),
31
31
  stateManager.updateInteractionState(ts_types_1.InteractionState.grabing)));
32
32
  })), scene.tableGroup.addEventListener("pointermove", (e => {
33
33
  if ("down" === poniterState) {
@@ -70,12 +70,12 @@ function bindContainerDomListener(eventManager) {
70
70
  gantt.verticalSplitResizeLine.childNodes[1].style.opacity = "1";
71
71
  })), gantt.verticalSplitResizeLine && handler.on(gantt.verticalSplitResizeLine, "mouseout", (e => {
72
72
  gantt.verticalSplitResizeLine.childNodes[1].style.opacity = "0";
73
- }))), vtable_1.VRender.vglobal.addEventListener("mousedown", (e => {
73
+ }))), vrender_1.vglobal.addEventListener("mousedown", (e => {
74
74
  gantt.eventManager.lastDragPointerXYOnWindow = {
75
75
  x: e.x,
76
76
  y: e.y
77
77
  };
78
- })), vtable_1.VRender.vglobal.addEventListener("mousemove", (e => {
78
+ })), vrender_1.vglobal.addEventListener("mousemove", (e => {
79
79
  var _a, _b;
80
80
  if (stateManager.interactionState === ts_types_1.InteractionState.grabing) {
81
81
  const lastX = null !== (_b = null === (_a = gantt.eventManager.lastDragPointerXYOnWindow) || void 0 === _a ? void 0 : _a.x) && void 0 !== _b ? _b : e.x;
@@ -85,7 +85,7 @@ function bindContainerDomListener(eventManager) {
85
85
  y: e.y
86
86
  });
87
87
  }
88
- })), vtable_1.VRender.vglobal.addEventListener("mouseup", (e => {
88
+ })), vrender_1.vglobal.addEventListener("mouseup", (e => {
89
89
  "grabing" === stateManager.interactionState && (stateManager.updateInteractionState(ts_types_1.InteractionState.default),
90
90
  stateManager.isResizingTableWidth() ? stateManager.endResizeTableWidth() : stateManager.isMoveingTaskBar() ? stateManager.endMoveTaskBar(e.x) : stateManager.isResizingTaskBar() && stateManager.endResizeTaskBar(e.x));
91
91
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/event/event-manager.ts"],"names":[],"mappings":"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","file":"event-manager.js","sourcesContent":["import { VRender } from '@visactor/vtable';\nimport type { Gantt } from '../Gantt';\nimport { EventHandler } from '../event/EventHandler';\nimport { handleWhell } from '../event/scroll';\nimport { throttle } from '../tools/util';\nimport { GANTT_EVENT_TYPE, InteractionState } from '../ts-types';\nimport { isValid } from '@visactor/vutils';\nimport { getPixelRatio } from '../tools/pixel-ratio';\nimport type { GanttTaskBarNode } from '../scenegraph/ganttNode';\nimport { getTaskIndexByY } from '../gantt-helper';\n\nexport class EventManager {\n _gantt: Gantt;\n _eventHandler: EventHandler;\n isDown: boolean = false;\n isDraging: boolean = false;\n lastDragPointerXYOnWindow: { x: number; y: number };\n\n // lastDragPointerXYOnResizeLine: { x: number; y: number };\n constructor(gantt: Gantt) {\n this._gantt = gantt;\n this._eventHandler = new EventHandler();\n this.bindEvent();\n }\n release() {\n this._eventHandler.release();\n }\n // 绑定DOM事件\n bindEvent() {\n bindTableGroupListener(this);\n bindContainerDomListener(this);\n // bindScrollBarListener(this);\n }\n}\nfunction bindTableGroupListener(event: EventManager) {\n const scene = event._gantt.scenegraph;\n const gantt = event._gantt;\n const stateManager = gantt.stateManager;\n let poniterState: 'down' | 'draging' | 'up';\n scene.tableGroup.addEventListener('pointerdown', (e: VRender.FederatedPointerEvent) => {\n poniterState = 'down';\n if (e.button !== 0) {\n // 只处理左键\n return;\n }\n const taskBarTarget = e.detailPath.find((pathNode: any) => {\n return pathNode.name === 'task-bar'; // || pathNode.name === 'task-bar-hover-shadow';\n }) as any as GanttTaskBarNode;\n if (taskBarTarget) {\n if (e.target.name === 'task-bar-hover-shadow-left-icon') {\n stateManager.startResizeTaskBar(taskBarTarget, (e.nativeEvent as any).x, (e.nativeEvent as any).y, 'left');\n stateManager.updateInteractionState(InteractionState.grabing);\n } else if (e.target.name === 'task-bar-hover-shadow-right-icon') {\n stateManager.startResizeTaskBar(taskBarTarget, (e.nativeEvent as any).x, (e.nativeEvent as any).y, 'right');\n stateManager.updateInteractionState(InteractionState.grabing);\n } else if (gantt.parsedOptions.taskBarMoveable) {\n stateManager.startMoveTaskBar(taskBarTarget, (e.nativeEvent as any).x, (e.nativeEvent as any).y);\n stateManager.updateInteractionState(InteractionState.grabing);\n }\n }\n });\n\n scene.tableGroup.addEventListener('pointermove', (e: VRender.FederatedPointerEvent) => {\n if (poniterState === 'down') {\n const x1 = gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n const y1 = gantt.eventManager.lastDragPointerXYOnWindow.y;\n const y2 = e.y;\n const dy = y2 - y1;\n if (dx >= 1 || dy >= 1) {\n poniterState = 'draging';\n }\n }\n if (stateManager.interactionState === InteractionState.default) {\n const taksIndex = e.detailPath.find((pathNode: any) => {\n return pathNode.name === 'task-bar'; // || pathNode.name === 'task-bar-hover-shadow';\n });\n if (taksIndex) {\n stateManager.showTaskBarHover(e);\n } else {\n stateManager.hideTaskBarHover(e);\n }\n }\n });\n scene.tableGroup.addEventListener('pointerup', (e: VRender.FederatedPointerEvent) => {\n if (poniterState === 'down' && gantt.hasListeners(GANTT_EVENT_TYPE.CLICK_TASK_BAR)) {\n const taskIndex = getTaskIndexByY((e.nativeEvent as any).y, gantt);\n const record = gantt.getRecordByIndex(taskIndex);\n gantt.fireListeners(GANTT_EVENT_TYPE.CLICK_TASK_BAR, {\n event: e.nativeEvent,\n index: taskIndex,\n record\n });\n }\n poniterState = 'up';\n });\n\n scene.tableGroup.addEventListener('pointerenter', (e: VRender.FederatedPointerEvent) => {\n if (\n (gantt.parsedOptions.scrollStyle.horizontalVisible &&\n gantt.parsedOptions.scrollStyle.horizontalVisible === 'focus') ||\n (!gantt.parsedOptions.scrollStyle.horizontalVisible && gantt.parsedOptions.scrollStyle.visible === 'focus')\n ) {\n scene.scrollbarComponent.showHorizontalScrollBar();\n }\n if (\n (gantt.parsedOptions.scrollStyle.verticalVisible &&\n gantt.parsedOptions.scrollStyle.verticalVisible === 'focus') ||\n (!gantt.parsedOptions.scrollStyle.verticalVisible && gantt.parsedOptions.scrollStyle.visible === 'focus')\n ) {\n scene.scrollbarComponent.showVerticalScrollBar();\n }\n });\n\n scene.tableGroup.addEventListener('pointerleave', (e: VRender.FederatedPointerEvent) => {\n if (\n (gantt.parsedOptions.scrollStyle.horizontalVisible &&\n gantt.parsedOptions.scrollStyle.horizontalVisible === 'focus') ||\n (!gantt.parsedOptions.scrollStyle.horizontalVisible && gantt.parsedOptions.scrollStyle.visible === 'focus')\n ) {\n scene.scrollbarComponent.hideHorizontalScrollBar();\n }\n if (\n (gantt.parsedOptions.scrollStyle.verticalVisible &&\n gantt.parsedOptions.scrollStyle.verticalVisible === 'focus') ||\n (!gantt.parsedOptions.scrollStyle.verticalVisible && gantt.parsedOptions.scrollStyle.visible === 'focus')\n ) {\n scene.scrollbarComponent.hideVerticalScrollBar();\n }\n });\n}\n\nfunction bindContainerDomListener(eventManager: EventManager) {\n const gantt = eventManager._gantt;\n const scene = eventManager._gantt.scenegraph;\n const stateManager = gantt.stateManager;\n const handler = eventManager._eventHandler;\n handler.on(gantt.getElement(), 'wheel', (e: WheelEvent) => {\n handleWhell(e, stateManager, eventManager._gantt);\n });\n\n handler.on(gantt.getContainer(), 'resize', (e: any) => {\n // if (table.canvasSizeSeted) {\n // return;\n // }\n if (e.width === 0 && e.height === 0) {\n // 临时绕行解决因为display设置为none产生的问题\n return;\n }\n if (!isValid(gantt.options.pixelRatio)) {\n gantt.setPixelRatio(getPixelRatio());\n }\n if (!e.windowSizeNotChange) {\n gantt._resize();\n }\n });\n if (gantt.taskListTableInstance && gantt.parsedOptions.verticalSplitLineMoveable) {\n handler.on(gantt.verticalSplitResizeLine, 'mousedown', (e: MouseEvent) => {\n console.log('resizeLine mousedown');\n stateManager.updateInteractionState(InteractionState.grabing);\n stateManager.startResizeTableWidth(e);\n });\n }\n if (gantt.parsedOptions.verticalSplitLineHighlight) {\n // 添加鼠标悬停时的高亮效果\n gantt.verticalSplitResizeLine &&\n handler.on(gantt.verticalSplitResizeLine, 'mouseover', (e: MouseEvent) => {\n (gantt.verticalSplitResizeLine.childNodes[1] as HTMLDivElement).style.opacity = '1';\n });\n\n // 添加鼠标移出时恢复初始样式\n gantt.verticalSplitResizeLine &&\n handler.on(gantt.verticalSplitResizeLine, 'mouseout', (e: MouseEvent) => {\n (gantt.verticalSplitResizeLine.childNodes[1] as HTMLDivElement).style.opacity = '0';\n });\n }\n VRender.vglobal.addEventListener('mousedown', (e: VRender.FederatedPointerEvent) => {\n gantt.eventManager.lastDragPointerXYOnWindow = { x: e.x, y: e.y };\n });\n VRender.vglobal.addEventListener('mousemove', (e: VRender.FederatedPointerEvent) => {\n if (stateManager.interactionState === InteractionState.grabing) {\n const lastX = gantt.eventManager.lastDragPointerXYOnWindow?.x ?? e.x;\n // const lastY = gantt.eventManager.lastDragPointerXYOnWindow?.y ?? e.y;\n if (Math.abs(lastX - e.x) >= 1) {\n if (stateManager.isResizingTableWidth()) {\n stateManager.dealResizeTableWidth(e);\n } else if (stateManager.isMoveingTaskBar()) {\n stateManager.dealTaskBarMove(e);\n } else if (stateManager.isResizingTaskBar()) {\n stateManager.dealTaskBarResize(e);\n }\n gantt.eventManager.lastDragPointerXYOnWindow = { x: e.x, y: e.y };\n }\n }\n });\n VRender.vglobal.addEventListener('mouseup', (e: MouseEvent) => {\n if (stateManager.interactionState === 'grabing') {\n stateManager.updateInteractionState(InteractionState.default);\n if (stateManager.isResizingTableWidth()) {\n stateManager.endResizeTableWidth();\n } else if (stateManager.isMoveingTaskBar()) {\n stateManager.endMoveTaskBar(e.x);\n } else if (stateManager.isResizingTaskBar()) {\n stateManager.endResizeTaskBar(e.x);\n }\n }\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/event/event-manager.ts"],"names":[],"mappings":"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","file":"event-manager.js","sourcesContent":["import { vglobal } from '@visactor/vtable/es/vrender';\nimport type { FederatedPointerEvent } from '@visactor/vtable/es/vrender';\nimport type { Gantt } from '../Gantt';\nimport { EventHandler } from '../event/EventHandler';\nimport { handleWhell } from '../event/scroll';\nimport { throttle } from '../tools/util';\nimport { GANTT_EVENT_TYPE, InteractionState } from '../ts-types';\nimport { isValid } from '@visactor/vutils';\nimport { getPixelRatio } from '../tools/pixel-ratio';\nimport type { GanttTaskBarNode } from '../scenegraph/ganttNode';\nimport { getTaskIndexByY } from '../gantt-helper';\n\nexport class EventManager {\n _gantt: Gantt;\n _eventHandler: EventHandler;\n isDown: boolean = false;\n isDraging: boolean = false;\n lastDragPointerXYOnWindow: { x: number; y: number };\n\n // lastDragPointerXYOnResizeLine: { x: number; y: number };\n constructor(gantt: Gantt) {\n this._gantt = gantt;\n this._eventHandler = new EventHandler();\n this.bindEvent();\n }\n release() {\n this._eventHandler.release();\n }\n // 绑定DOM事件\n bindEvent() {\n bindTableGroupListener(this);\n bindContainerDomListener(this);\n // bindScrollBarListener(this);\n }\n}\nfunction bindTableGroupListener(event: EventManager) {\n const scene = event._gantt.scenegraph;\n const gantt = event._gantt;\n const stateManager = gantt.stateManager;\n let poniterState: 'down' | 'draging' | 'up';\n scene.tableGroup.addEventListener('pointerdown', (e: FederatedPointerEvent) => {\n poniterState = 'down';\n if (e.button !== 0) {\n // 只处理左键\n return;\n }\n const taskBarTarget = e.detailPath.find((pathNode: any) => {\n return pathNode.name === 'task-bar'; // || pathNode.name === 'task-bar-hover-shadow';\n }) as any as GanttTaskBarNode;\n if (taskBarTarget) {\n if (e.target.name === 'task-bar-hover-shadow-left-icon') {\n stateManager.startResizeTaskBar(\n taskBarTarget,\n (e.nativeEvent as any).x,\n (e.nativeEvent as any).y,\n e.offset.y,\n 'left'\n );\n stateManager.updateInteractionState(InteractionState.grabing);\n } else if (e.target.name === 'task-bar-hover-shadow-right-icon') {\n stateManager.startResizeTaskBar(\n taskBarTarget,\n (e.nativeEvent as any).x,\n (e.nativeEvent as any).y,\n e.offset.y,\n 'right'\n );\n stateManager.updateInteractionState(InteractionState.grabing);\n } else if (gantt.parsedOptions.taskBarMoveable) {\n stateManager.startMoveTaskBar(taskBarTarget, (e.nativeEvent as any).x, (e.nativeEvent as any).y, e.offset.y);\n stateManager.updateInteractionState(InteractionState.grabing);\n }\n }\n });\n\n scene.tableGroup.addEventListener('pointermove', (e: FederatedPointerEvent) => {\n if (poniterState === 'down') {\n const x1 = gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n const y1 = gantt.eventManager.lastDragPointerXYOnWindow.y;\n const y2 = e.y;\n const dy = y2 - y1;\n if (dx >= 1 || dy >= 1) {\n poniterState = 'draging';\n }\n }\n if (stateManager.interactionState === InteractionState.default) {\n const taksIndex = e.detailPath.find((pathNode: any) => {\n return pathNode.name === 'task-bar'; // || pathNode.name === 'task-bar-hover-shadow';\n });\n if (taksIndex) {\n stateManager.showTaskBarHover(e);\n } else {\n stateManager.hideTaskBarHover(e);\n }\n }\n });\n scene.tableGroup.addEventListener('pointerup', (e: FederatedPointerEvent) => {\n if (poniterState === 'down' && gantt.hasListeners(GANTT_EVENT_TYPE.CLICK_TASK_BAR)) {\n const taskIndex = getTaskIndexByY((e.nativeEvent as any).y, gantt);\n const record = gantt.getRecordByIndex(taskIndex);\n gantt.fireListeners(GANTT_EVENT_TYPE.CLICK_TASK_BAR, {\n event: e.nativeEvent,\n index: taskIndex,\n record\n });\n }\n poniterState = 'up';\n });\n\n scene.tableGroup.addEventListener('pointerenter', (e: FederatedPointerEvent) => {\n if (\n (gantt.parsedOptions.scrollStyle.horizontalVisible &&\n gantt.parsedOptions.scrollStyle.horizontalVisible === 'focus') ||\n (!gantt.parsedOptions.scrollStyle.horizontalVisible && gantt.parsedOptions.scrollStyle.visible === 'focus')\n ) {\n scene.scrollbarComponent.showHorizontalScrollBar();\n }\n if (\n (gantt.parsedOptions.scrollStyle.verticalVisible &&\n gantt.parsedOptions.scrollStyle.verticalVisible === 'focus') ||\n (!gantt.parsedOptions.scrollStyle.verticalVisible && gantt.parsedOptions.scrollStyle.visible === 'focus')\n ) {\n scene.scrollbarComponent.showVerticalScrollBar();\n }\n });\n\n scene.tableGroup.addEventListener('pointerleave', (e: FederatedPointerEvent) => {\n if (\n (gantt.parsedOptions.scrollStyle.horizontalVisible &&\n gantt.parsedOptions.scrollStyle.horizontalVisible === 'focus') ||\n (!gantt.parsedOptions.scrollStyle.horizontalVisible && gantt.parsedOptions.scrollStyle.visible === 'focus')\n ) {\n scene.scrollbarComponent.hideHorizontalScrollBar();\n }\n if (\n (gantt.parsedOptions.scrollStyle.verticalVisible &&\n gantt.parsedOptions.scrollStyle.verticalVisible === 'focus') ||\n (!gantt.parsedOptions.scrollStyle.verticalVisible && gantt.parsedOptions.scrollStyle.visible === 'focus')\n ) {\n scene.scrollbarComponent.hideVerticalScrollBar();\n }\n });\n}\n\nfunction bindContainerDomListener(eventManager: EventManager) {\n const gantt = eventManager._gantt;\n const scene = eventManager._gantt.scenegraph;\n const stateManager = gantt.stateManager;\n const handler = eventManager._eventHandler;\n handler.on(gantt.getElement(), 'wheel', (e: WheelEvent) => {\n handleWhell(e, stateManager, eventManager._gantt);\n });\n\n handler.on(gantt.getContainer(), 'resize', (e: any) => {\n // if (table.canvasSizeSeted) {\n // return;\n // }\n if (e.width === 0 && e.height === 0) {\n // 临时绕行解决因为display设置为none产生的问题\n return;\n }\n if (!isValid(gantt.options.pixelRatio)) {\n gantt.setPixelRatio(getPixelRatio());\n }\n if (!e.windowSizeNotChange) {\n gantt._resize();\n }\n });\n if (gantt.taskListTableInstance && gantt.parsedOptions.verticalSplitLineMoveable) {\n handler.on(gantt.verticalSplitResizeLine, 'mousedown', (e: MouseEvent) => {\n console.log('resizeLine mousedown');\n stateManager.updateInteractionState(InteractionState.grabing);\n stateManager.startResizeTableWidth(e);\n });\n }\n if (gantt.parsedOptions.verticalSplitLineHighlight) {\n // 添加鼠标悬停时的高亮效果\n gantt.verticalSplitResizeLine &&\n handler.on(gantt.verticalSplitResizeLine, 'mouseover', (e: MouseEvent) => {\n (gantt.verticalSplitResizeLine.childNodes[1] as HTMLDivElement).style.opacity = '1';\n });\n\n // 添加鼠标移出时恢复初始样式\n gantt.verticalSplitResizeLine &&\n handler.on(gantt.verticalSplitResizeLine, 'mouseout', (e: MouseEvent) => {\n (gantt.verticalSplitResizeLine.childNodes[1] as HTMLDivElement).style.opacity = '0';\n });\n }\n vglobal.addEventListener('mousedown', (e: FederatedPointerEvent) => {\n gantt.eventManager.lastDragPointerXYOnWindow = { x: e.x, y: e.y };\n });\n vglobal.addEventListener('mousemove', (e: FederatedPointerEvent) => {\n if (stateManager.interactionState === InteractionState.grabing) {\n const lastX = gantt.eventManager.lastDragPointerXYOnWindow?.x ?? e.x;\n // const lastY = gantt.eventManager.lastDragPointerXYOnWindow?.y ?? e.y;\n if (Math.abs(lastX - e.x) >= 1) {\n if (stateManager.isResizingTableWidth()) {\n stateManager.dealResizeTableWidth(e);\n } else if (stateManager.isMoveingTaskBar()) {\n stateManager.dealTaskBarMove(e);\n } else if (stateManager.isResizingTaskBar()) {\n stateManager.dealTaskBarResize(e);\n }\n gantt.eventManager.lastDragPointerXYOnWindow = { x: e.x, y: e.y };\n }\n }\n });\n vglobal.addEventListener('mouseup', (e: MouseEvent) => {\n if (stateManager.interactionState === 'grabing') {\n stateManager.updateInteractionState(InteractionState.default);\n if (stateManager.isResizingTableWidth()) {\n stateManager.endResizeTableWidth();\n } else if (stateManager.isMoveingTaskBar()) {\n stateManager.endMoveTaskBar(e.x);\n } else if (stateManager.isResizingTaskBar()) {\n stateManager.endResizeTaskBar(e.x);\n }\n }\n });\n}\n"]}