@visactor/vtable-gantt 1.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/README.md +151 -0
  2. package/cjs/Gantt.d.ts +111 -0
  3. package/cjs/Gantt.js +244 -0
  4. package/cjs/Gantt.js.map +1 -0
  5. package/cjs/data/DataSource.d.ts +9 -0
  6. package/cjs/data/DataSource.js +30 -0
  7. package/cjs/data/DataSource.js.map +1 -0
  8. package/cjs/env.d.ts +19 -0
  9. package/cjs/env.js +48 -0
  10. package/cjs/env.js.map +1 -0
  11. package/cjs/event/EventHandler.d.ts +47 -0
  12. package/cjs/event/EventHandler.js +128 -0
  13. package/cjs/event/EventHandler.js.map +1 -0
  14. package/cjs/event/EventTarget.d.ts +12 -0
  15. package/cjs/event/EventTarget.js +67 -0
  16. package/cjs/event/EventTarget.js.map +1 -0
  17. package/cjs/event/event-manager.d.ts +15 -0
  18. package/cjs/event/event-manager.js +76 -0
  19. package/cjs/event/event-manager.js.map +1 -0
  20. package/cjs/event/scroll.d.ts +22 -0
  21. package/cjs/event/scroll.js +136 -0
  22. package/cjs/event/scroll.js.map +1 -0
  23. package/cjs/gantt-helper.d.ts +28 -0
  24. package/cjs/gantt-helper.js +225 -0
  25. package/cjs/gantt-helper.js.map +1 -0
  26. package/cjs/index.d.ts +7 -0
  27. package/cjs/index.js +48 -0
  28. package/cjs/index.js.map +1 -0
  29. package/cjs/register.d.ts +1 -0
  30. package/cjs/register.js +1 -0
  31. package/cjs/register.js.map +1 -0
  32. package/cjs/scenegraph/frame-border.d.ts +9 -0
  33. package/cjs/scenegraph/frame-border.js +42 -0
  34. package/cjs/scenegraph/frame-border.js.map +1 -0
  35. package/cjs/scenegraph/ganttNode.d.ts +7 -0
  36. package/cjs/scenegraph/ganttNode.js +16 -0
  37. package/cjs/scenegraph/ganttNode.js.map +1 -0
  38. package/cjs/scenegraph/grid.d.ts +30 -0
  39. package/cjs/scenegraph/grid.js +130 -0
  40. package/cjs/scenegraph/grid.js.map +1 -0
  41. package/cjs/scenegraph/mark-line.d.ts +15 -0
  42. package/cjs/scenegraph/mark-line.js +66 -0
  43. package/cjs/scenegraph/mark-line.js.map +1 -0
  44. package/cjs/scenegraph/scenegraph.d.ts +41 -0
  45. package/cjs/scenegraph/scenegraph.js +109 -0
  46. package/cjs/scenegraph/scenegraph.js.map +1 -0
  47. package/cjs/scenegraph/scroll-bar.d.ts +19 -0
  48. package/cjs/scenegraph/scroll-bar.js +150 -0
  49. package/cjs/scenegraph/scroll-bar.js.map +1 -0
  50. package/cjs/scenegraph/task-bar.d.ts +24 -0
  51. package/cjs/scenegraph/task-bar.js +188 -0
  52. package/cjs/scenegraph/task-bar.js.map +1 -0
  53. package/cjs/scenegraph/timeline-header.d.ts +10 -0
  54. package/cjs/scenegraph/timeline-header.js +134 -0
  55. package/cjs/scenegraph/timeline-header.js.map +1 -0
  56. package/cjs/state/gantt-table-sync.d.ts +7 -0
  57. package/cjs/state/gantt-table-sync.js +60 -0
  58. package/cjs/state/gantt-table-sync.js.map +1 -0
  59. package/cjs/state/state-manager.d.ts +58 -0
  60. package/cjs/state/state-manager.js +223 -0
  61. package/cjs/state/state-manager.js.map +1 -0
  62. package/cjs/themes.d.ts +1 -0
  63. package/cjs/themes.js +1 -0
  64. package/cjs/themes.js.map +1 -0
  65. package/cjs/tools/debounce.d.ts +1 -0
  66. package/cjs/tools/debounce.js +51 -0
  67. package/cjs/tools/debounce.js.map +1 -0
  68. package/cjs/tools/index.d.ts +2 -0
  69. package/cjs/tools/index.js +20 -0
  70. package/cjs/tools/index.js.map +1 -0
  71. package/cjs/tools/isx.d.ts +16 -0
  72. package/cjs/tools/isx.js +117 -0
  73. package/cjs/tools/isx.js.map +1 -0
  74. package/cjs/tools/pixel-ratio.d.ts +2 -0
  75. package/cjs/tools/pixel-ratio.js +16 -0
  76. package/cjs/tools/pixel-ratio.js.map +1 -0
  77. package/cjs/tools/util.d.ts +7 -0
  78. package/cjs/tools/util.js +87 -0
  79. package/cjs/tools/util.js.map +1 -0
  80. package/cjs/ts-types/EVENT_TYPE.d.ts +5 -0
  81. package/cjs/ts-types/EVENT_TYPE.js +9 -0
  82. package/cjs/ts-types/EVENT_TYPE.js.map +1 -0
  83. package/cjs/ts-types/common.d.ts +13 -0
  84. package/cjs/ts-types/common.js +14 -0
  85. package/cjs/ts-types/common.js.map +1 -0
  86. package/cjs/ts-types/events.d.ts +14 -0
  87. package/cjs/ts-types/events.js +6 -0
  88. package/cjs/ts-types/events.js.map +1 -0
  89. package/cjs/ts-types/gantt-engine.d.ts +163 -0
  90. package/cjs/ts-types/gantt-engine.js +6 -0
  91. package/cjs/ts-types/gantt-engine.js.map +1 -0
  92. package/cjs/ts-types/index.d.ts +4 -0
  93. package/cjs/ts-types/index.js +22 -0
  94. package/cjs/ts-types/index.js.map +1 -0
  95. package/dist/vtable-gantt.js +53942 -0
  96. package/dist/vtable-gantt.min.js +1 -0
  97. package/es/Gantt.d.ts +111 -0
  98. package/es/Gantt.js +246 -0
  99. package/es/Gantt.js.map +1 -0
  100. package/es/data/DataSource.d.ts +9 -0
  101. package/es/data/DataSource.js +22 -0
  102. package/es/data/DataSource.js.map +1 -0
  103. package/es/env.d.ts +19 -0
  104. package/es/env.js +42 -0
  105. package/es/env.js.map +1 -0
  106. package/es/event/EventHandler.d.ts +47 -0
  107. package/es/event/EventHandler.js +119 -0
  108. package/es/event/EventHandler.js.map +1 -0
  109. package/es/event/EventTarget.d.ts +12 -0
  110. package/es/event/EventTarget.js +58 -0
  111. package/es/event/EventTarget.js.map +1 -0
  112. package/es/event/event-manager.d.ts +15 -0
  113. package/es/event/event-manager.js +78 -0
  114. package/es/event/event-manager.js.map +1 -0
  115. package/es/event/scroll.d.ts +22 -0
  116. package/es/event/scroll.js +126 -0
  117. package/es/event/scroll.js.map +1 -0
  118. package/es/gantt-helper.d.ts +28 -0
  119. package/es/gantt-helper.js +220 -0
  120. package/es/gantt-helper.js.map +1 -0
  121. package/es/index.d.ts +7 -0
  122. package/es/index.js +10 -0
  123. package/es/index.js.map +1 -0
  124. package/es/register.d.ts +1 -0
  125. package/es/register.js +1 -0
  126. package/es/register.js.map +1 -0
  127. package/es/scenegraph/frame-border.d.ts +9 -0
  128. package/es/scenegraph/frame-border.js +34 -0
  129. package/es/scenegraph/frame-border.js.map +1 -0
  130. package/es/scenegraph/ganttNode.d.ts +7 -0
  131. package/es/scenegraph/ganttNode.js +8 -0
  132. package/es/scenegraph/ganttNode.js.map +1 -0
  133. package/es/scenegraph/grid.d.ts +30 -0
  134. package/es/scenegraph/grid.js +122 -0
  135. package/es/scenegraph/grid.js.map +1 -0
  136. package/es/scenegraph/mark-line.d.ts +15 -0
  137. package/es/scenegraph/mark-line.js +58 -0
  138. package/es/scenegraph/mark-line.js.map +1 -0
  139. package/es/scenegraph/scenegraph.d.ts +41 -0
  140. package/es/scenegraph/scenegraph.js +116 -0
  141. package/es/scenegraph/scenegraph.js.map +1 -0
  142. package/es/scenegraph/scroll-bar.d.ts +19 -0
  143. package/es/scenegraph/scroll-bar.js +144 -0
  144. package/es/scenegraph/scroll-bar.js.map +1 -0
  145. package/es/scenegraph/task-bar.d.ts +24 -0
  146. package/es/scenegraph/task-bar.js +188 -0
  147. package/es/scenegraph/task-bar.js.map +1 -0
  148. package/es/scenegraph/timeline-header.d.ts +10 -0
  149. package/es/scenegraph/timeline-header.js +130 -0
  150. package/es/scenegraph/timeline-header.js.map +1 -0
  151. package/es/state/gantt-table-sync.d.ts +7 -0
  152. package/es/state/gantt-table-sync.js +51 -0
  153. package/es/state/gantt-table-sync.js.map +1 -0
  154. package/es/state/state-manager.d.ts +58 -0
  155. package/es/state/state-manager.js +219 -0
  156. package/es/state/state-manager.js.map +1 -0
  157. package/es/themes.d.ts +1 -0
  158. package/es/themes.js +1 -0
  159. package/es/themes.js.map +1 -0
  160. package/es/tools/debounce.d.ts +1 -0
  161. package/es/tools/debounce.js +43 -0
  162. package/es/tools/debounce.js.map +1 -0
  163. package/es/tools/index.d.ts +2 -0
  164. package/es/tools/index.js +4 -0
  165. package/es/tools/index.js.map +1 -0
  166. package/es/tools/isx.d.ts +16 -0
  167. package/es/tools/isx.js +80 -0
  168. package/es/tools/isx.js.map +1 -0
  169. package/es/tools/pixel-ratio.d.ts +2 -0
  170. package/es/tools/pixel-ratio.js +12 -0
  171. package/es/tools/pixel-ratio.js.map +1 -0
  172. package/es/tools/util.d.ts +7 -0
  173. package/es/tools/util.js +78 -0
  174. package/es/tools/util.js.map +1 -0
  175. package/es/ts-types/EVENT_TYPE.d.ts +5 -0
  176. package/es/ts-types/EVENT_TYPE.js +5 -0
  177. package/es/ts-types/EVENT_TYPE.js.map +1 -0
  178. package/es/ts-types/common.d.ts +13 -0
  179. package/es/ts-types/common.js +13 -0
  180. package/es/ts-types/common.js.map +1 -0
  181. package/es/ts-types/events.d.ts +14 -0
  182. package/es/ts-types/events.js +2 -0
  183. package/es/ts-types/events.js.map +1 -0
  184. package/es/ts-types/gantt-engine.d.ts +163 -0
  185. package/es/ts-types/gantt-engine.js +2 -0
  186. package/es/ts-types/gantt-engine.js.map +1 -0
  187. package/es/ts-types/index.d.ts +4 -0
  188. package/es/ts-types/index.js +8 -0
  189. package/es/ts-types/index.js.map +1 -0
  190. package/package.json +122 -0
@@ -0,0 +1,188 @@
1
+ import { VRender } from "@visactor/vtable";
2
+
3
+ import { parseStringTemplate, toBoxArray } from "../tools/util";
4
+
5
+ import { isValid } from "@visactor/vutils";
6
+
7
+ import { getTextPos } from "../gantt-helper";
8
+
9
+ import { GanttTaskBarNode } from "./ganttNode";
10
+
11
+ const TASKBAR_HOVER_ICON = '<svg width="100" height="200" xmlns="http://www.w3.org/2000/svg">\n <line x1="30" y1="10" x2="30" y2="190" stroke="black" stroke-width="4"/>\n <line x1="70" y1="10" x2="70" y2="190" stroke="black" stroke-width="4"/>\n</svg>';
12
+
13
+ export class TaskBar {
14
+ constructor(scene) {
15
+ this._scene = scene, this.width = scene._gantt.tableNoFrameWidth, this.height = scene._gantt.gridHeight,
16
+ this.group = new VRender.Group({
17
+ x: 0,
18
+ y: scene._gantt.getAllHeaderRowsHeight(),
19
+ width: this.width,
20
+ height: this.height,
21
+ pickable: !1,
22
+ clip: !0
23
+ }), this.group.name = "task-bar-container", scene.tableGroup.addChild(this.group),
24
+ this.initBars(), this.initHoverBarIcons();
25
+ }
26
+ initBars() {
27
+ this.barContainer = new VRender.Group({
28
+ x: 0,
29
+ y: 0,
30
+ width: this._scene._gantt.getAllColsWidth(),
31
+ height: this._scene._gantt.getAllGridHeight(),
32
+ pickable: !1,
33
+ clip: !0
34
+ }), this.group.appendChild(this.barContainer);
35
+ for (let i = 0; i < this._scene._gantt.itemCount; i++) {
36
+ const barGroup = this.initBar(i);
37
+ barGroup && this.barContainer.appendChild(barGroup);
38
+ }
39
+ }
40
+ initBar(index) {
41
+ var _a, _b;
42
+ const taskBarCustomLayout = this._scene._gantt.parsedOptions.taskBarCustomLayout, {startDate: startDate, endDate: endDate, taskDays: taskDays, progress: progress, taskRecord: taskRecord} = this._scene._gantt.getTaskInfoByTaskListIndex(index);
43
+ if (taskDays <= 0) return null;
44
+ const taskBarSize = this._scene._gantt.parsedOptions.colWidthPerDay * taskDays, taskbarHeight = this._scene._gantt.parsedOptions.taskBarStyle.width, minDate = new Date(this._scene._gantt.parsedOptions.minDate), barGroup = new GanttTaskBarNode({
45
+ x: this._scene._gantt.parsedOptions.colWidthPerDay * Math.ceil(Math.abs(startDate.getTime() - minDate.getTime()) / 864e5),
46
+ y: this._scene._gantt.parsedOptions.rowHeight * index + (this._scene._gantt.parsedOptions.rowHeight - taskbarHeight) / 2,
47
+ width: taskBarSize,
48
+ height: taskbarHeight,
49
+ cornerRadius: this._scene._gantt.parsedOptions.taskBarStyle.cornerRadius,
50
+ clip: !0
51
+ });
52
+ let rootContainer;
53
+ barGroup.name = "task-bar";
54
+ let renderDefaultBar = !0, renderDefaultText = !0;
55
+ if (taskBarCustomLayout) {
56
+ let customLayoutObj;
57
+ if ("function" == typeof taskBarCustomLayout) {
58
+ customLayoutObj = taskBarCustomLayout({
59
+ width: taskBarSize,
60
+ height: taskbarHeight,
61
+ index: index,
62
+ startDate: startDate,
63
+ endDate: endDate,
64
+ taskDays: taskDays,
65
+ progress: progress,
66
+ taskRecord: taskRecord,
67
+ ganttInstance: this._scene._gantt
68
+ });
69
+ } else customLayoutObj = taskBarCustomLayout;
70
+ customLayoutObj && (rootContainer = customLayoutObj.rootContainer, renderDefaultBar = null !== (_a = customLayoutObj.renderDefaultBar) && void 0 !== _a && _a,
71
+ renderDefaultText = null !== (_b = customLayoutObj.renderDefaultText) && void 0 !== _b && _b,
72
+ rootContainer.name = "task-bar-custom-render");
73
+ }
74
+ if (renderDefaultBar) {
75
+ const rect = VRender.createRect({
76
+ x: 0,
77
+ y: 0,
78
+ width: taskBarSize,
79
+ height: taskbarHeight,
80
+ fill: this._scene._gantt.parsedOptions.taskBarStyle.barColor,
81
+ pickable: !1
82
+ });
83
+ rect.name = "task-bar-rect", barGroup.appendChild(rect), barGroup.barRect = rect;
84
+ const progress_rect = VRender.createRect({
85
+ x: 0,
86
+ y: 0,
87
+ width: taskBarSize * progress / 100,
88
+ height: taskbarHeight,
89
+ fill: this._scene._gantt.parsedOptions.taskBarStyle.completedBarColor,
90
+ pickable: !1
91
+ });
92
+ progress_rect.name = "task-bar-progress-rect", barGroup.appendChild(progress_rect),
93
+ barGroup.progressRect = progress_rect;
94
+ }
95
+ if (rootContainer && barGroup.appendChild(rootContainer), renderDefaultText) {
96
+ const {textAlign: textAlign, textBaseline: textBaseline, fontSize: fontSize, fontFamily: fontFamily, textOverflow: textOverflow, color: color, padding: padding} = this._scene._gantt.parsedOptions.taskBarLabelStyle, position = getTextPos(toBoxArray(padding), textAlign, textBaseline, taskBarSize, taskbarHeight), label = VRender.createText({
97
+ pickable: !1,
98
+ x: position.x,
99
+ y: position.y,
100
+ fontSize: fontSize,
101
+ fill: color,
102
+ fontFamily: fontFamily,
103
+ text: parseStringTemplate(this._scene._gantt.parsedOptions.taskBarLabelText, taskRecord),
104
+ maxLineWidth: taskBarSize - 20,
105
+ textBaseline: textBaseline,
106
+ textAlign: textAlign,
107
+ ellipsis: "clip" === textOverflow ? "" : "ellipsis" === textOverflow ? "..." : isValid(textOverflow) ? textOverflow : void 0
108
+ });
109
+ barGroup.appendChild(label), barGroup.textLabel = label;
110
+ }
111
+ return barGroup;
112
+ }
113
+ updateTaskBarNode(index) {
114
+ var _a;
115
+ const taskbarGroup = null === (_a = this.barContainer.getChildren()) || void 0 === _a ? void 0 : _a[index];
116
+ if (taskbarGroup) {
117
+ this.barContainer.removeChild(taskbarGroup);
118
+ const barGroup = this.initBar(index);
119
+ barGroup && this.barContainer.insertInto(barGroup, index);
120
+ }
121
+ }
122
+ initHoverBarIcons() {
123
+ const hoverBarGroup = new VRender.Group({
124
+ x: 0,
125
+ y: 0,
126
+ width: 100,
127
+ height: 100,
128
+ clip: !0,
129
+ cursor: this._scene._gantt.parsedOptions.taskBarMoveable ? "grab" : "default",
130
+ pickable: !1,
131
+ cornerRadius: this._scene._gantt.parsedOptions.taskBarStyle.cornerRadius,
132
+ fill: this._scene._gantt.parsedOptions.taskBarHoverColor,
133
+ visibleAll: !1
134
+ });
135
+ if (this.hoverBarGroup = hoverBarGroup, hoverBarGroup.name = "task-bar-hover-shadow",
136
+ this._scene._gantt.parsedOptions.taskBarResizable) {
137
+ const icon = new VRender.Image({
138
+ x: 0,
139
+ y: 0,
140
+ width: 10,
141
+ height: 20,
142
+ image: TASKBAR_HOVER_ICON,
143
+ pickable: !0,
144
+ cursor: "col-resize"
145
+ });
146
+ icon.name = "task-bar-hover-shadow-left-icon", this.hoverBarLeftIcon = icon, hoverBarGroup.appendChild(icon);
147
+ const rightIcon = new VRender.Image({
148
+ x: 0,
149
+ y: 0,
150
+ width: 10,
151
+ height: 20,
152
+ image: TASKBAR_HOVER_ICON,
153
+ pickable: !0,
154
+ cursor: "col-resize"
155
+ });
156
+ rightIcon.name = "task-bar-hover-shadow-right-icon", this.hoverBarRightIcon = rightIcon,
157
+ hoverBarGroup.appendChild(rightIcon);
158
+ }
159
+ }
160
+ setX(x) {
161
+ this.barContainer.setAttribute("x", x);
162
+ }
163
+ setY(y) {
164
+ this.barContainer.setAttribute("y", y);
165
+ }
166
+ refreshItems() {
167
+ this.height = this._scene._gantt.gridHeight, this.group.setAttribute("height", this.height),
168
+ this.barContainer.removeAllChild(), this.group.removeChild(this.barContainer), this.initBars();
169
+ }
170
+ resize() {
171
+ this.width = this._scene._gantt.tableNoFrameWidth, this.height = this._scene._gantt.gridHeight,
172
+ this.group.setAttribute("width", this.width), this.group.setAttribute("height", this.height);
173
+ }
174
+ showHoverBar(x, y, width, height, target) {
175
+ target && "task-bar" === target.name && target.appendChild(this.hoverBarGroup),
176
+ this.hoverBarGroup.setAttribute("x", 0), this.hoverBarGroup.setAttribute("y", 0),
177
+ this.hoverBarGroup.setAttribute("width", width), this.hoverBarGroup.setAttribute("height", height),
178
+ this.hoverBarGroup.setAttribute("visibleAll", !0), this.hoverBarLeftIcon && (this.hoverBarLeftIcon.setAttribute("x", 0),
179
+ this.hoverBarLeftIcon.setAttribute("y", Math.ceil(height / 10)), this.hoverBarLeftIcon.setAttribute("width", 10),
180
+ this.hoverBarLeftIcon.setAttribute("height", height - 2 * Math.ceil(height / 10)),
181
+ this.hoverBarRightIcon.setAttribute("x", width - 10), this.hoverBarRightIcon.setAttribute("y", Math.ceil(height / 10)),
182
+ this.hoverBarRightIcon.setAttribute("width", 10), this.hoverBarRightIcon.setAttribute("height", height - 2 * Math.ceil(height / 10)));
183
+ }
184
+ hideHoverBar() {
185
+ this.hoverBarGroup.setAttribute("visibleAll", !1);
186
+ }
187
+ }
188
+ //# sourceMappingURL=task-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/scenegraph/task-bar.ts"],"names":[],"mappings":"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","file":"task-bar.js","sourcesContent":["import { VRender } from '@visactor/vtable';\nimport type { Scenegraph } from './scenegraph';\n// import { Icon } from './icon';\nimport { parseStringTemplate, toBoxArray } from '../tools/util';\nimport { isValid } from '@visactor/vutils';\nimport { getTextPos } from '../gantt-helper';\nimport { GanttTaskBarNode } from './ganttNode';\n\nconst TASKBAR_HOVER_ICON = `<svg width=\"100\" height=\"200\" xmlns=\"http://www.w3.org/2000/svg\">\n <line x1=\"30\" y1=\"10\" x2=\"30\" y2=\"190\" stroke=\"black\" stroke-width=\"4\"/>\n <line x1=\"70\" y1=\"10\" x2=\"70\" y2=\"190\" stroke=\"black\" stroke-width=\"4\"/>\n</svg>`;\n\nexport class TaskBar {\n group: VRender.Group;\n barContainer: VRender.Group;\n hoverBarGroup: VRender.Group;\n hoverBarLeftIcon: VRender.Image;\n hoverBarRightIcon: VRender.Image;\n _scene: Scenegraph;\n width: number;\n height: number;\n constructor(scene: Scenegraph) {\n this._scene = scene;\n // const height = Math.min(scene._gantt.tableNoFrameHeight, scene._gantt.drawHeight);\n this.width = scene._gantt.tableNoFrameWidth;\n this.height = scene._gantt.gridHeight;\n this.group = new VRender.Group({\n x: 0,\n y: scene._gantt.getAllHeaderRowsHeight(),\n width: this.width,\n height: this.height,\n pickable: false,\n clip: true\n });\n this.group.name = 'task-bar-container';\n scene.tableGroup.addChild(this.group);\n this.initBars();\n this.initHoverBarIcons();\n }\n\n initBars() {\n this.barContainer = new VRender.Group({\n x: 0,\n y: 0,\n width: this._scene._gantt.getAllColsWidth(),\n height: this._scene._gantt.getAllGridHeight(),\n pickable: false,\n clip: true\n });\n this.group.appendChild(this.barContainer);\n\n for (let i = 0; i < this._scene._gantt.itemCount; i++) {\n const barGroup = this.initBar(i);\n if (barGroup) {\n this.barContainer.appendChild(barGroup);\n }\n }\n }\n initBar(index: number) {\n const taskBarCustomLayout = this._scene._gantt.parsedOptions.taskBarCustomLayout;\n const { startDate, endDate, taskDays, progress, taskRecord } = this._scene._gantt.getTaskInfoByTaskListIndex(index);\n if (taskDays <= 0) {\n return null;\n }\n const taskBarSize = this._scene._gantt.parsedOptions.colWidthPerDay * taskDays;\n const taskbarHeight = this._scene._gantt.parsedOptions.taskBarStyle.width;\n const minDate = new Date(this._scene._gantt.parsedOptions.minDate);\n const barGroup = new GanttTaskBarNode({\n x:\n this._scene._gantt.parsedOptions.colWidthPerDay *\n Math.ceil(Math.abs(startDate.getTime() - minDate.getTime()) / (1000 * 60 * 60 * 24)),\n // y: this._scene._gantt.parsedOptions.rowHeight * i,\n y:\n this._scene._gantt.parsedOptions.rowHeight * index +\n (this._scene._gantt.parsedOptions.rowHeight - taskbarHeight) / 2,\n width: taskBarSize,\n // height: this._scene._gantt.parsedOptions.rowHeight,\n height: taskbarHeight,\n cornerRadius: this._scene._gantt.parsedOptions.taskBarStyle.cornerRadius,\n clip: true\n });\n barGroup.name = 'task-bar';\n // this.barContainer.appendChild(barGroup);\n let rootContainer;\n let renderDefaultBar = true;\n let renderDefaultText = true;\n\n if (taskBarCustomLayout) {\n let customLayoutObj;\n if (typeof taskBarCustomLayout === 'function') {\n const arg = {\n width: taskBarSize,\n height: taskbarHeight,\n index,\n startDate,\n endDate,\n taskDays,\n progress,\n taskRecord,\n ganttInstance: this._scene._gantt\n };\n customLayoutObj = taskBarCustomLayout(arg);\n } else {\n customLayoutObj = taskBarCustomLayout;\n }\n if (customLayoutObj) {\n // if (customLayoutObj.rootContainer) {\n // customLayoutObj.rootContainer = decodeReactDom(customLayoutObj.rootContainer);\n // }\n rootContainer = customLayoutObj.rootContainer;\n renderDefaultBar = customLayoutObj.renderDefaultBar ?? false;\n renderDefaultText = customLayoutObj.renderDefaultText ?? false;\n rootContainer.name = 'task-bar-custom-render';\n }\n }\n\n if (renderDefaultBar) {\n // 创建整个任务条rect\n const rect = VRender.createRect({\n x: 0,\n y: 0, //this._scene._gantt.parsedOptions.rowHeight - taskbarHeight) / 2,\n width: taskBarSize,\n height: taskbarHeight,\n fill: this._scene._gantt.parsedOptions.taskBarStyle.barColor,\n pickable: false\n });\n rect.name = 'task-bar-rect';\n barGroup.appendChild(rect);\n barGroup.barRect = rect;\n // 创建已完成部分任务条rect\n const progress_rect = VRender.createRect({\n x: 0,\n y: 0, //(this._scene._gantt.parsedOptions.rowHeight - taskbarHeight) / 2,\n width: (taskBarSize * progress) / 100,\n height: taskbarHeight,\n fill: this._scene._gantt.parsedOptions.taskBarStyle.completedBarColor,\n pickable: false\n });\n progress_rect.name = 'task-bar-progress-rect';\n barGroup.appendChild(progress_rect);\n barGroup.progressRect = progress_rect;\n }\n\n rootContainer && barGroup.appendChild(rootContainer);\n if (renderDefaultText) {\n const { textAlign, textBaseline, fontSize, fontFamily, textOverflow, color, padding } =\n this._scene._gantt.parsedOptions.taskBarLabelStyle;\n const position = getTextPos(toBoxArray(padding), textAlign, textBaseline, taskBarSize, taskbarHeight);\n //创建label 文字\n const label = VRender.createText({\n // visible: false,\n pickable: false,\n x: position.x, //extAlign === 'center' ? taskBarSize / 2 : textAlign === 'left' ? 10 : taskBarSize - 10,\n y: position.y, //fontSize / 2,\n fontSize: fontSize, // 10\n fill: color,\n fontFamily: fontFamily,\n text: parseStringTemplate(this._scene._gantt.parsedOptions.taskBarLabelText as string, taskRecord),\n maxLineWidth: taskBarSize - 20,\n textBaseline,\n textAlign,\n ellipsis:\n textOverflow === 'clip'\n ? ''\n : textOverflow === 'ellipsis'\n ? '...'\n : isValid(textOverflow)\n ? textOverflow\n : undefined\n // dx: 12 + 4,\n // dy: this._scene._gantt.barLabelStyle.fontSize / 2\n });\n barGroup.appendChild(label);\n barGroup.textLabel = label;\n }\n return barGroup;\n }\n updateTaskBarNode(index: number) {\n const taskbarGroup = this.barContainer.getChildren()?.[index] as GanttTaskBarNode;\n if (taskbarGroup) {\n this.barContainer.removeChild(taskbarGroup);\n const barGroup = this.initBar(index);\n if (barGroup) {\n this.barContainer.insertInto(barGroup, index); //TODO\n }\n }\n }\n initHoverBarIcons() {\n // const target = this._scene._gantt.stateManager.hoverTaskBar.target;\n\n // const barGroup = new VRender.Group({\n // x: target.attribute.x,\n // y: target.attribute.y,\n // width: target.attribute.width,\n // height: target.attribute.height,\n // cornerRadius: target.attribute.cornerRadius,\n // clip: true,\n // cursor: 'grab'\n // });\n const hoverBarGroup = new VRender.Group({\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n clip: true,\n cursor: this._scene._gantt.parsedOptions.taskBarMoveable ? 'grab' : 'default',\n pickable: false,\n cornerRadius: this._scene._gantt.parsedOptions.taskBarStyle.cornerRadius,\n fill: this._scene._gantt.parsedOptions.taskBarHoverColor,\n visibleAll: false\n });\n this.hoverBarGroup = hoverBarGroup;\n hoverBarGroup.name = 'task-bar-hover-shadow';\n // this.barContainer.appendChild(hoverBarGroup);\n // 创建左侧的icon\n if (this._scene._gantt.parsedOptions.taskBarResizable) {\n const icon = new VRender.Image({\n x: 0,\n y: 0, //this._scene._gantt.parsedOptions.rowHeight - taskbarHeight) / 2,\n width: 10,\n height: 20,\n image: TASKBAR_HOVER_ICON,\n pickable: true,\n cursor: 'col-resize'\n });\n icon.name = 'task-bar-hover-shadow-left-icon';\n this.hoverBarLeftIcon = icon;\n hoverBarGroup.appendChild(icon);\n\n // 创建右侧的icon\n const rightIcon = new VRender.Image({\n x: 0,\n y: 0, //this._scene._gantt.parsedOptions.rowHeight - taskbarHeight) / 2,\n width: 10,\n height: 20,\n image: TASKBAR_HOVER_ICON,\n pickable: true,\n cursor: 'col-resize'\n });\n rightIcon.name = 'task-bar-hover-shadow-right-icon';\n this.hoverBarRightIcon = rightIcon;\n hoverBarGroup.appendChild(rightIcon);\n }\n }\n setX(x: number) {\n this.barContainer.setAttribute('x', x);\n }\n setY(y: number) {\n this.barContainer.setAttribute('y', y);\n }\n /** 重新创建任务条节点 */\n refreshItems() {\n this.height = this._scene._gantt.gridHeight;\n this.group.setAttribute('height', this.height);\n this.barContainer.removeAllChild();\n this.group.removeChild(this.barContainer);\n this.initBars();\n }\n resize() {\n this.width = this._scene._gantt.tableNoFrameWidth;\n this.height = this._scene._gantt.gridHeight;\n this.group.setAttribute('width', this.width);\n this.group.setAttribute('height', this.height);\n }\n\n showHoverBar(x: number, y: number, width: number, height: number, target?: VRender.Group) {\n if (target && target.name === 'task-bar') {\n // this.hoverBarGroup.releatedTaskBar = target;\n target.appendChild(this.hoverBarGroup);\n }\n this.hoverBarGroup.setAttribute('x', 0);\n this.hoverBarGroup.setAttribute('y', 0);\n this.hoverBarGroup.setAttribute('width', width);\n this.hoverBarGroup.setAttribute('height', height);\n this.hoverBarGroup.setAttribute('visibleAll', true);\n if (this.hoverBarLeftIcon) {\n this.hoverBarLeftIcon.setAttribute('x', 0);\n this.hoverBarLeftIcon.setAttribute('y', Math.ceil(height / 10));\n this.hoverBarLeftIcon.setAttribute('width', 10);\n this.hoverBarLeftIcon.setAttribute('height', height - 2 * Math.ceil(height / 10));\n this.hoverBarRightIcon.setAttribute('x', width - 10);\n this.hoverBarRightIcon.setAttribute('y', Math.ceil(height / 10));\n this.hoverBarRightIcon.setAttribute('width', 10);\n this.hoverBarRightIcon.setAttribute('height', height - 2 * Math.ceil(height / 10));\n }\n }\n hideHoverBar() {\n this.hoverBarGroup.setAttribute('visibleAll', false);\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { Scenegraph } from './scenegraph';
2
+ import { VRender } from '@visactor/vtable';
3
+ export declare class TimelineHeader {
4
+ group: VRender.Group;
5
+ _scene: Scenegraph;
6
+ constructor(scene: Scenegraph);
7
+ setX(x: number): void;
8
+ setY(y: number): void;
9
+ resize(): void;
10
+ }
@@ -0,0 +1,130 @@
1
+ import { isValid } from "@visactor/vutils";
2
+
3
+ import { getTextPos } from "../gantt-helper";
4
+
5
+ import { toBoxArray } from "../tools/util";
6
+
7
+ import { VRender } from "@visactor/vtable";
8
+
9
+ export class TimelineHeader {
10
+ constructor(scene) {
11
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
12
+ this._scene = scene;
13
+ const dateHeader = new VRender.Group({
14
+ x: 0,
15
+ y: 0,
16
+ width: scene._gantt.getAllColsWidth(),
17
+ height: scene._gantt.getAllHeaderRowsHeight(),
18
+ clip: !0,
19
+ pickable: !1
20
+ });
21
+ this.group = dateHeader, dateHeader.name = "date-header-container", scene.tableGroup.addChild(this.group);
22
+ let y = 0;
23
+ for (let i = 0; i < scene._gantt.headerLevel; i++) {
24
+ const rowHeader = new VRender.Group({
25
+ x: 0,
26
+ y: y,
27
+ width: scene._gantt.getAllColsWidth(),
28
+ height: Array.isArray(scene._gantt.parsedOptions.headerRowHeight) ? scene._gantt.parsedOptions.headerRowHeight[i] : scene._gantt.parsedOptions.headerRowHeight,
29
+ clip: !1
30
+ });
31
+ y += rowHeader.attribute.height, rowHeader.name = "row-header", dateHeader.addChild(rowHeader);
32
+ const {unit: unit, timelineDates: timelineDates, customLayout: customLayout} = scene._gantt.sortedTimelineScales[i];
33
+ let x = 0;
34
+ for (let j = 0; j < timelineDates.length; j++) {
35
+ const {days: days, endDate: endDate, startDate: startDate, title: title, dateIndex: dateIndex} = timelineDates[j], date = new VRender.Group({
36
+ x: x,
37
+ y: 0,
38
+ width: scene._gantt.parsedOptions.colWidthPerDay * days,
39
+ height: rowHeader.attribute.height,
40
+ clip: !1,
41
+ fill: scene._gantt.parsedOptions.timelineHeaderBackgroundColor
42
+ });
43
+ let rootContainer;
44
+ date.name = "date-cell";
45
+ let renderDefaultText = !0;
46
+ const width = scene._gantt.parsedOptions.colWidthPerDay * timelineDates[j].days, height = rowHeader.attribute.height;
47
+ if (customLayout) {
48
+ let customLayoutObj;
49
+ if ("function" == typeof customLayout) {
50
+ customLayoutObj = customLayout({
51
+ width: width,
52
+ height: height,
53
+ index: j,
54
+ startDate: startDate,
55
+ endDate: endDate,
56
+ days: days,
57
+ dateIndex: dateIndex,
58
+ title: title,
59
+ ganttInstance: this._scene._gantt
60
+ });
61
+ } else customLayoutObj = customLayout;
62
+ customLayoutObj && (rootContainer = customLayoutObj.rootContainer, renderDefaultText = null !== (_a = customLayoutObj.renderDefaultText) && void 0 !== _a && _a,
63
+ rootContainer.name = "task-bar-custom-render"), rootContainer && date.appendChild(rootContainer);
64
+ }
65
+ if (renderDefaultText) {
66
+ const {padding: padding, textAlign: textAlign, textBaseline: textBaseline, textOverflow: textOverflow, fontSize: fontSize, fontWeight: fontWeight, color: color, strokeColor: strokeColor} = scene._gantt.parsedOptions.timelineHeaderStyles[i], position = getTextPos(toBoxArray(padding), textAlign, textBaseline, width, height), text = new VRender.Text({
67
+ x: position.x,
68
+ y: position.y,
69
+ maxLineWidth: width,
70
+ heightLimit: height,
71
+ pickable: !0,
72
+ text: title.toLocaleString(),
73
+ fontSize: fontSize,
74
+ fontWeight: fontWeight,
75
+ fill: color,
76
+ stroke: strokeColor,
77
+ lineWidth: 2,
78
+ textAlign: textAlign,
79
+ textBaseline: textBaseline,
80
+ ellipsis: "clip" === textOverflow ? "" : "ellipsis" === textOverflow ? "..." : isValid(textOverflow) ? textOverflow : void 0
81
+ });
82
+ date.appendChild(text);
83
+ }
84
+ if (rowHeader.addChild(date), j > 0) {
85
+ const line = VRender.createLine({
86
+ pickable: !1,
87
+ stroke: null === (_b = scene._gantt.parsedOptions.timelineHeaderVerticalLineStyle) || void 0 === _b ? void 0 : _b.lineColor,
88
+ lineWidth: null === (_c = scene._gantt.parsedOptions.timelineHeaderVerticalLineStyle) || void 0 === _c ? void 0 : _c.lineWidth,
89
+ points: [ {
90
+ x: 1 & (null === (_d = scene._gantt.parsedOptions.timelineHeaderVerticalLineStyle) || void 0 === _d ? void 0 : _d.lineWidth) ? .5 : 0,
91
+ y: 0
92
+ }, {
93
+ x: 1 & (null === (_e = scene._gantt.parsedOptions.timelineHeaderVerticalLineStyle) || void 0 === _e ? void 0 : _e.lineWidth) ? .5 : 0,
94
+ y: rowHeader.attribute.height
95
+ } ]
96
+ });
97
+ date.appendChild(line);
98
+ }
99
+ x += width;
100
+ }
101
+ if (i > 0) {
102
+ const line = VRender.createLine({
103
+ pickable: !1,
104
+ stroke: null === (_f = scene._gantt.parsedOptions.timelineHeaderHorizontalLineStyle) || void 0 === _f ? void 0 : _f.lineColor,
105
+ lineWidth: null === (_g = scene._gantt.parsedOptions.timelineHeaderHorizontalLineStyle) || void 0 === _g ? void 0 : _g.lineWidth,
106
+ points: [ {
107
+ x: 0,
108
+ y: 1 & (null === (_h = scene._gantt.parsedOptions.timelineHeaderHorizontalLineStyle) || void 0 === _h ? void 0 : _h.lineWidth) ? .5 : 0
109
+ }, {
110
+ x: scene._gantt.getAllColsWidth(),
111
+ y: 1 & (null === (_j = scene._gantt.parsedOptions.timelineHeaderHorizontalLineStyle) || void 0 === _j ? void 0 : _j.lineWidth) ? .5 : 0
112
+ } ]
113
+ });
114
+ rowHeader.addChild(line);
115
+ }
116
+ }
117
+ }
118
+ setX(x) {
119
+ this.group.setAttribute("x", x);
120
+ }
121
+ setY(y) {
122
+ this.group.setAttribute("y", y);
123
+ }
124
+ resize() {
125
+ var _a, _b, _c, _d;
126
+ this.group.setAttribute("width", null !== (_b = null === (_a = this.group.attribute) || void 0 === _a ? void 0 : _a.width) && void 0 !== _b ? _b : 0),
127
+ this.group.setAttribute("height", null !== (_d = null === (_c = this.group.attribute) || void 0 === _c ? void 0 : _c.height) && void 0 !== _d ? _d : 0);
128
+ }
129
+ }
130
+ //# sourceMappingURL=timeline-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/scenegraph/timeline-header.ts"],"names":[],"mappings":"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","file":"timeline-header.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport { getTextPos } from '../gantt-helper';\nimport { toBoxArray } from '../tools/util';\nimport type { Scenegraph } from './scenegraph';\nimport { VRender } from '@visactor/vtable';\nexport class TimelineHeader {\n group: VRender.Group;\n _scene: Scenegraph;\n constructor(scene: Scenegraph) {\n this._scene = scene;\n const dateHeader = new VRender.Group({\n x: 0,\n y: 0,\n width: scene._gantt.getAllColsWidth(), //width - 2,\n height: scene._gantt.getAllHeaderRowsHeight(),\n clip: true,\n pickable: false\n // fill: 'purple',\n // stroke: 'green',\n // lineWidth: 2\n });\n this.group = dateHeader;\n dateHeader.name = 'date-header-container';\n scene.tableGroup.addChild(this.group);\n\n let y = 0;\n for (let i = 0; i < scene._gantt.headerLevel; i++) {\n const rowHeader = new VRender.Group({\n x: 0,\n y,\n width: scene._gantt.getAllColsWidth(),\n height: Array.isArray(scene._gantt.parsedOptions.headerRowHeight)\n ? scene._gantt.parsedOptions.headerRowHeight[i]\n : scene._gantt.parsedOptions.headerRowHeight,\n clip: false\n });\n y += rowHeader.attribute.height;\n rowHeader.name = 'row-header';\n dateHeader.addChild(rowHeader);\n\n const { unit, timelineDates, customLayout } = scene._gantt.sortedTimelineScales[i];\n let x = 0;\n for (let j = 0; j < timelineDates.length; j++) {\n const { days, endDate, startDate, title, dateIndex } = timelineDates[j];\n const date = new VRender.Group({\n x,\n y: 0,\n width: scene._gantt.parsedOptions.colWidthPerDay * days,\n height: rowHeader.attribute.height,\n clip: false,\n fill: scene._gantt.parsedOptions.timelineHeaderBackgroundColor\n });\n date.name = 'date-cell';\n // const rect = createRect({\n // x: 0,\n // y: 0,\n // width: scene._gantt.parsedOptions.colWidthPerDay * timelineDates[j].days,\n // height: scene._gantt.parsedOptions.headerRowHeight,\n // fill: scene._gantt.parsedOptions.timelineHeaderStyle?.backgroundColor\n // });\n // date.appendChild(rect);\n let rootContainer;\n let renderDefaultText = true;\n const width = scene._gantt.parsedOptions.colWidthPerDay * timelineDates[j].days;\n const height = rowHeader.attribute.height;\n if (customLayout) {\n let customLayoutObj;\n if (typeof customLayout === 'function') {\n const arg = {\n width,\n height,\n index: j,\n startDate,\n endDate,\n days,\n dateIndex,\n title,\n ganttInstance: this._scene._gantt\n };\n customLayoutObj = customLayout(arg);\n } else {\n customLayoutObj = customLayout;\n }\n if (customLayoutObj) {\n // if (customLayoutObj.rootContainer) {\n // customLayoutObj.rootContainer = decodeReactDom(customLayoutObj.rootContainer);\n // }\n rootContainer = customLayoutObj.rootContainer;\n renderDefaultText = customLayoutObj.renderDefaultText ?? false;\n rootContainer.name = 'task-bar-custom-render';\n }\n rootContainer && date.appendChild(rootContainer);\n }\n if (renderDefaultText) {\n const { padding, textAlign, textBaseline, textOverflow, fontSize, fontWeight, color, strokeColor } =\n scene._gantt.parsedOptions.timelineHeaderStyles[i];\n\n const position = getTextPos(toBoxArray(padding), textAlign, textBaseline, width, height);\n const text = new VRender.Text({\n x: position.x,\n y: position.y,\n maxLineWidth: width,\n // width: scene._gantt.parsedOptions.colWidthPerDay * timelineDates[j].days,\n heightLimit: height,\n // clip: true,\n pickable: true,\n text: title.toLocaleString(),\n fontSize: fontSize,\n\n fontWeight: fontWeight,\n fill: color,\n stroke: strokeColor,\n lineWidth: 2,\n textAlign,\n textBaseline,\n ellipsis:\n textOverflow === 'clip'\n ? ''\n : textOverflow === 'ellipsis'\n ? '...'\n : isValid(textOverflow)\n ? textOverflow\n : undefined\n });\n date.appendChild(text);\n }\n rowHeader.addChild(date);\n\n if (j > 0) {\n const line = VRender.createLine({\n pickable: false,\n stroke: scene._gantt.parsedOptions.timelineHeaderVerticalLineStyle?.lineColor,\n lineWidth: scene._gantt.parsedOptions.timelineHeaderVerticalLineStyle?.lineWidth,\n points: [\n { x: scene._gantt.parsedOptions.timelineHeaderVerticalLineStyle?.lineWidth & 1 ? 0.5 : 0, y: 0 },\n {\n x: scene._gantt.parsedOptions.timelineHeaderVerticalLineStyle?.lineWidth & 1 ? 0.5 : 0,\n y: rowHeader.attribute.height\n }\n ]\n });\n date.appendChild(line);\n }\n x += width;\n }\n //创建表头分割线 水平分割线 TODO\n if (i > 0) {\n const line = VRender.createLine({\n pickable: false,\n stroke: scene._gantt.parsedOptions.timelineHeaderHorizontalLineStyle?.lineColor,\n lineWidth: scene._gantt.parsedOptions.timelineHeaderHorizontalLineStyle?.lineWidth,\n points: [\n { x: 0, y: scene._gantt.parsedOptions.timelineHeaderHorizontalLineStyle?.lineWidth & 1 ? 0.5 : 0 },\n {\n x: scene._gantt.getAllColsWidth(),\n y: scene._gantt.parsedOptions.timelineHeaderHorizontalLineStyle?.lineWidth & 1 ? 0.5 : 0\n }\n ]\n });\n rowHeader.addChild(line);\n }\n }\n }\n setX(x: number) {\n this.group.setAttribute('x', x);\n }\n setY(y: number) {\n this.group.setAttribute('y', y);\n }\n resize() {\n this.group.setAttribute('width', this.group.attribute?.width ?? 0);\n this.group.setAttribute('height', this.group.attribute?.height ?? 0);\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import type { Gantt } from '../Gantt';
2
+ export declare function syncScrollStateToTable(gantt: Gantt): void;
3
+ export declare function syncScrollStateFromTable(gantt: Gantt): void;
4
+ export declare function syncResizeStateFromTable(gantt: Gantt): void;
5
+ export declare function syncEditCellFromTable(gantt: Gantt): void;
6
+ export declare function syncDragOrderFromTable(gantt: Gantt): void;
7
+ export declare function syncTreeChangeFromTable(gantt: Gantt): void;
@@ -0,0 +1,51 @@
1
+ export function syncScrollStateToTable(gantt) {
2
+ const {scroll: scroll} = gantt.stateManager, {verticalBarPos: verticalBarPos} = scroll;
3
+ gantt.taskListTableInstance.stateManager.setScrollTop(verticalBarPos, !1);
4
+ }
5
+
6
+ export function syncScrollStateFromTable(gantt) {
7
+ var _a;
8
+ gantt.taskListTableInstance && (null === (_a = gantt.taskListTableInstance) || void 0 === _a || _a.on("scroll", (args => {
9
+ if ("vertical" === args.scrollDirection) {
10
+ const {scroll: scroll} = gantt.taskListTableInstance.stateManager, {verticalBarPos: verticalBarPos} = scroll;
11
+ gantt.stateManager.setScrollTop(verticalBarPos, !1);
12
+ }
13
+ })));
14
+ }
15
+
16
+ export function syncResizeStateFromTable(gantt) {
17
+ var _a, _b;
18
+ gantt.taskListTableInstance && "auto" === (null === (_a = gantt.options.taskListTable) || void 0 === _a ? void 0 : _a.width) && (null === (_b = gantt.taskListTableInstance) || void 0 === _b || _b.on("resize_column", (args => {
19
+ gantt.taskTableWidth = gantt.taskListTableInstance.getAllColsWidth() + 2 * gantt.taskListTableInstance.tableX,
20
+ gantt.element.style.left = gantt.taskTableWidth ? `${gantt.taskTableWidth}px` : "0px",
21
+ gantt._resize();
22
+ })));
23
+ }
24
+
25
+ export function syncEditCellFromTable(gantt) {
26
+ var _a;
27
+ null === (_a = gantt.taskListTableInstance) || void 0 === _a || _a.on("change_cell_value", (args => {
28
+ const {col: col, row: row, rawValue: rawValue, changedValue: changedValue} = args;
29
+ gantt.redrawRecord(row - gantt.taskListTableInstance.columnHeaderLevelCount);
30
+ }));
31
+ }
32
+
33
+ export function syncDragOrderFromTable(gantt) {
34
+ var _a;
35
+ null === (_a = gantt.taskListTableInstance) || void 0 === _a || _a.on("change_header_position", (args => {
36
+ gantt.scenegraph.refreshTaskBars();
37
+ const left = gantt.stateManager.scroll.horizontalBarPos, top = gantt.stateManager.scroll.verticalBarPos;
38
+ gantt.scenegraph.setX(-left), gantt.scenegraph.setY(-top);
39
+ }));
40
+ }
41
+
42
+ export function syncTreeChangeFromTable(gantt) {
43
+ var _a;
44
+ null === (_a = gantt.taskListTableInstance) || void 0 === _a || _a.on("tree_hierarchy_state_change", (args => {
45
+ gantt._syncPropsFromTable(), gantt.resizeLine.style.height = gantt.drawHeight + "px",
46
+ gantt.scenegraph.refreshTaskBarsAndGrid();
47
+ const left = gantt.stateManager.scroll.horizontalBarPos, top = gantt.stateManager.scroll.verticalBarPos;
48
+ gantt.scenegraph.setX(-left), gantt.scenegraph.setY(-top);
49
+ }));
50
+ }
51
+ //# sourceMappingURL=gantt-table-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/state/gantt-table-sync.ts"],"names":[],"mappings":"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","file":"gantt-table-sync.js","sourcesContent":["import type { Gantt } from '../Gantt';\n\nexport function syncScrollStateToTable(gantt: Gantt) {\n const { scroll } = gantt.stateManager;\n const { verticalBarPos } = scroll;\n gantt.taskListTableInstance.stateManager.setScrollTop(verticalBarPos, false);\n}\n\nexport function syncScrollStateFromTable(gantt: Gantt) {\n if (gantt.taskListTableInstance) {\n gantt.taskListTableInstance?.on('scroll', (args: any) => {\n if (args.scrollDirection === 'vertical') {\n const { scroll } = gantt.taskListTableInstance.stateManager;\n const { verticalBarPos } = scroll;\n gantt.stateManager.setScrollTop(verticalBarPos, false);\n }\n });\n }\n}\nexport function syncResizeStateFromTable(gantt: Gantt) {\n if (gantt.taskListTableInstance && gantt.options.taskListTable?.width === 'auto') {\n gantt.taskListTableInstance?.on('resize_column', (args: any) => {\n gantt.taskTableWidth = gantt.taskListTableInstance.getAllColsWidth() + gantt.taskListTableInstance.tableX * 2;\n gantt.element.style.left = gantt.taskTableWidth ? `${gantt.taskTableWidth}px` : '0px';\n gantt._resize();\n });\n }\n}\nexport function syncEditCellFromTable(gantt: Gantt) {\n gantt.taskListTableInstance?.on('change_cell_value', (args: any) => {\n const { col, row, rawValue, changedValue } = args;\n gantt.redrawRecord(row - gantt.taskListTableInstance.columnHeaderLevelCount);\n // const record = gantt.getRecordByIndex(row - gantt.listTableInstance.columnHeaderLevelCount);\n // debugger;\n });\n}\n\nexport function syncDragOrderFromTable(gantt: Gantt) {\n gantt.taskListTableInstance?.on('change_header_position', (args: any) => {\n gantt.scenegraph.refreshTaskBars();\n const left = gantt.stateManager.scroll.horizontalBarPos;\n const top = gantt.stateManager.scroll.verticalBarPos;\n gantt.scenegraph.setX(-left);\n gantt.scenegraph.setY(-top);\n });\n}\n\nexport function syncTreeChangeFromTable(gantt: Gantt) {\n gantt.taskListTableInstance?.on('tree_hierarchy_state_change', (args: any) => {\n gantt._syncPropsFromTable();\n gantt.resizeLine.style.height = gantt.drawHeight + 'px'; //'100%';\n gantt.scenegraph.refreshTaskBarsAndGrid();\n const left = gantt.stateManager.scroll.horizontalBarPos;\n const top = gantt.stateManager.scroll.verticalBarPos;\n gantt.scenegraph.setX(-left);\n gantt.scenegraph.setY(-top);\n });\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import type { Gantt } from '../Gantt';
2
+ import { InteractionState } from '../ts-types';
3
+ import type { VRender } from '@visactor/vtable';
4
+ import type { GanttTaskBarNode } from '../scenegraph/ganttNode';
5
+ export declare class StateManager {
6
+ _gantt: Gantt;
7
+ scroll: {
8
+ horizontalBarPos: number;
9
+ verticalBarPos: number;
10
+ };
11
+ fastScrolling: boolean;
12
+ interactionState: InteractionState;
13
+ moveTaskBar: {
14
+ startX: number;
15
+ startY: number;
16
+ targetStartX: number;
17
+ moving: boolean;
18
+ target: GanttTaskBarNode;
19
+ };
20
+ hoverTaskBar: {
21
+ startX: number;
22
+ targetStartX: number;
23
+ target: GanttTaskBarNode;
24
+ };
25
+ resizeTaskBar: {
26
+ startX: number;
27
+ startY: number;
28
+ targetStartX: number;
29
+ target: GanttTaskBarNode;
30
+ resizing: boolean;
31
+ onIconName: string;
32
+ };
33
+ resizeTableWidth: {
34
+ lastX: number;
35
+ resizing: boolean;
36
+ };
37
+ resetInteractionState: (this: any, ...args: any) => any;
38
+ constructor(gantt: Gantt);
39
+ setScrollTop(top: number, triggerEvent?: boolean): void;
40
+ setScrollLeft(left: number, triggerEvent?: boolean): void;
41
+ updateInteractionState(mode: InteractionState): void;
42
+ updateVerticalScrollBar(yRatio: number): void;
43
+ updateHorizontalScrollBar(xRatio: number): void;
44
+ startMoveTaskBar(target: GanttTaskBarNode, x: number, y: number): void;
45
+ isMoveingTaskBar(): boolean;
46
+ endMoveTaskBar(x: number): void;
47
+ dealTaskBarMove(e: VRender.FederatedPointerEvent): void;
48
+ startResizeTaskBar(target: VRender.Group, x: number, y: number, onIconName: string): void;
49
+ isResizingTaskBar(): boolean;
50
+ endResizeTaskBar(x: number): void;
51
+ dealTaskBarResize(e: VRender.FederatedPointerEvent): void;
52
+ startResizeTableWidth(e: MouseEvent): void;
53
+ isResizingTableWidth(): boolean;
54
+ endResizeTableWidth(): void;
55
+ dealResizeTableWidth(e: MouseEvent): void;
56
+ showTaskBarHover(e: VRender.FederatedPointerEvent): void;
57
+ hideTaskBarHover(): void;
58
+ }