@visactor/vtable-gantt 1.10.3 → 1.10.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 (41) hide show
  1. package/cjs/Gantt.d.ts +1 -1
  2. package/cjs/Gantt.js +2 -1
  3. package/cjs/Gantt.js.map +1 -1
  4. package/cjs/gantt-helper.d.ts +3 -3
  5. package/cjs/gantt-helper.js +14 -4
  6. package/cjs/gantt-helper.js.map +1 -1
  7. package/cjs/index.d.ts +1 -1
  8. package/cjs/index.js +1 -1
  9. package/cjs/index.js.map +1 -1
  10. package/cjs/scenegraph/mark-line.js +1 -1
  11. package/cjs/scenegraph/mark-line.js.map +1 -1
  12. package/cjs/scenegraph/scenegraph.js +2 -2
  13. package/cjs/scenegraph/scenegraph.js.map +1 -1
  14. package/cjs/scenegraph/task-bar.js +4 -7
  15. package/cjs/scenegraph/task-bar.js.map +1 -1
  16. package/cjs/state/state-manager.js +4 -4
  17. package/cjs/state/state-manager.js.map +1 -1
  18. package/cjs/ts-types/gantt-engine.d.ts +2 -2
  19. package/cjs/ts-types/gantt-engine.js.map +1 -1
  20. package/dist/vtable-gantt.js +123 -79
  21. package/dist/vtable-gantt.min.js +2 -2
  22. package/es/Gantt.d.ts +1 -1
  23. package/es/Gantt.js +2 -1
  24. package/es/Gantt.js.map +1 -1
  25. package/es/gantt-helper.d.ts +3 -3
  26. package/es/gantt-helper.js +14 -4
  27. package/es/gantt-helper.js.map +1 -1
  28. package/es/index.d.ts +1 -1
  29. package/es/index.js +1 -1
  30. package/es/index.js.map +1 -1
  31. package/es/scenegraph/mark-line.js +1 -1
  32. package/es/scenegraph/mark-line.js.map +1 -1
  33. package/es/scenegraph/scenegraph.js +2 -2
  34. package/es/scenegraph/scenegraph.js.map +1 -1
  35. package/es/scenegraph/task-bar.js +4 -7
  36. package/es/scenegraph/task-bar.js.map +1 -1
  37. package/es/state/state-manager.js +2 -2
  38. package/es/state/state-manager.js.map +1 -1
  39. package/es/ts-types/gantt-engine.d.ts +2 -2
  40. package/es/ts-types/gantt-engine.js.map +1 -1
  41. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/state/state-manager.ts"],"names":[],"mappings":"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","file":"state-manager.js","sourcesContent":["import { clone, cloneDeep, isValid } from '@visactor/vutils';\nimport type { Gantt } from '../Gantt';\nimport type { ITaskLink } from '../ts-types';\nimport { InteractionState, GANTT_EVENT_TYPE, DependencyType } from '../ts-types';\nimport type { Group, FederatedPointerEvent, Polygon, Line, Circle } from '@visactor/vtable/es/vrender';\nimport {\n syncEditCellFromTable,\n syncScrollStateFromTable,\n syncScrollStateToTable,\n syncDragOrderFromTable,\n syncTreeChangeFromTable,\n syncSortFromTable\n} from './gantt-table-sync';\nimport { findRecordByTaskKey, getTaskIndexByY } from '../gantt-helper';\nimport { debounce } from '../tools/debounce';\nimport type { GanttTaskBarNode } from '../scenegraph/gantt-node';\nimport { TASKBAR_HOVER_ICON_WIDTH } from '../scenegraph/task-bar';\nimport { Inertia } from '../tools/inertia';\nimport { generateLinkLinePoints, updateLinkLinePoints } from '../scenegraph/dependency-link';\nexport class StateManager {\n _gantt: Gantt;\n\n scroll: {\n horizontalBarPos: number;\n verticalBarPos: number;\n };\n fastScrolling: boolean;\n /**\n * Default 默认展示\n * grabing 拖拽中\n * -Resize column 改变列宽\n * -column move 调整列顺序\n * -drag select 拖拽多选\n * Scrolling 滚动中\n */\n interactionState: InteractionState = InteractionState.default;\n\n moveTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n deltaX: number;\n targetStartX: number;\n startOffsetY: number;\n moving: boolean;\n target: GanttTaskBarNode;\n moveTaskBarXSpeed: number;\n moveTaskBarXInertia: Inertia;\n };\n\n hoverTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n targetStartX: number;\n target: GanttTaskBarNode;\n };\n resizeTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n /** 刚开始时 任务条节点的offsetX */\n startOffsetY: number;\n targetStartX: number;\n target: GanttTaskBarNode;\n resizing: boolean;\n onIconName: string;\n };\n selectedTaskBar: {\n target: GanttTaskBarNode;\n };\n resizeTableWidth: {\n /** x坐标是相对table内坐标 */\n lastX: number;\n resizing: boolean;\n };\n\n selectedDenpendencyLink: {\n link: ITaskLink & { vtable_gantt_linkArrowNode: Polygon; vtable_gantt_linkLineNode: Line };\n };\n creatingDenpendencyLink: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n startOffsetY: number;\n targetStartX: number;\n startClickedPoint: Group;\n creating: boolean;\n firstTaskBarPosition: 'left' | 'right';\n secondTaskBarPosition: 'left' | 'right';\n secondTaskBarNode: GanttTaskBarNode;\n lastHighLightLinkPoint: Group;\n };\n // 供滚动重置为default使用\n resetInteractionState = debounce(() => {\n this.updateInteractionState(InteractionState.default);\n }, 100);\n constructor(gantt: Gantt) {\n this._gantt = gantt;\n this.scroll = {\n horizontalBarPos: 0,\n verticalBarPos: 0\n };\n this.moveTaskBar = {\n targetStartX: null,\n deltaX: 0,\n startOffsetY: null,\n startX: null,\n startY: null,\n moving: false,\n target: null,\n moveTaskBarXSpeed: 0,\n moveTaskBarXInertia: new Inertia()\n };\n\n this.hoverTaskBar = {\n targetStartX: null,\n startX: null,\n target: null\n };\n\n this.selectedTaskBar = {\n target: null\n };\n this.resizeTaskBar = {\n startOffsetY: null,\n targetStartX: null,\n startX: null,\n startY: null,\n target: null,\n resizing: false,\n onIconName: ''\n };\n this.resizeTableWidth = {\n lastX: null,\n resizing: false\n };\n this.selectedDenpendencyLink = {\n link: null\n };\n this.creatingDenpendencyLink = {\n startClickedPoint: null,\n startX: null,\n startY: null,\n startOffsetY: null,\n targetStartX: null,\n creating: false,\n secondTaskBarNode: null\n };\n\n this.updateVerticalScrollBar = this.updateVerticalScrollBar.bind(this);\n this.updateHorizontalScrollBar = this.updateHorizontalScrollBar.bind(this);\n\n syncScrollStateFromTable(this._gantt);\n syncEditCellFromTable(this._gantt);\n syncDragOrderFromTable(this._gantt);\n syncTreeChangeFromTable(this._gantt);\n syncSortFromTable(this._gantt);\n }\n\n setScrollTop(top: number, triggerEvent: boolean = true) {\n // 矫正top值范围\n const totalHeight = this._gantt.getAllRowsHeight();\n top = Math.max(0, Math.min(top, totalHeight - this._gantt.scenegraph.height));\n top = Math.ceil(top);\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n this.scroll.verticalBarPos = top;\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n // 设置scenegraph坐标\n this._gantt.scenegraph.setY(-top);\n\n // 更新scrollbar位置\n const yRatio = top / (totalHeight - this._gantt.scenegraph.height);\n this._gantt.scenegraph.scrollbarComponent.updateVerticalScrollBarPos(yRatio);\n\n if (oldVerticalBarPos !== top && triggerEvent) {\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n }\n get scrollLeft() {\n return this.scroll.horizontalBarPos;\n }\n get scrollTop() {\n return this.scroll.verticalBarPos;\n }\n setScrollLeft(left: number, triggerEvent: boolean = true) {\n // 矫正left值范围\n const totalWidth = this._gantt._getAllColsWidth();\n\n left = Math.max(0, Math.min(left, totalWidth - this._gantt.scenegraph.width));\n left = Math.ceil(left);\n // 滚动期间清空选中清空\n // if (left !== this.scroll.horizontalBarPos) {\n // this.updateHoverPos(-1, -1);\n // }\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = left;\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n\n // 设置scenegraph坐标\n this._gantt.scenegraph.setX(-left);\n\n // 更新scrollbar位置\n const xRatio = left / (totalWidth - this._gantt.scenegraph.width);\n this._gantt.scenegraph.scrollbarComponent.updateHorizontalScrollBarPos(xRatio);\n\n if (oldHorizontalBarPos !== left && triggerEvent) {\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioX: xRatio\n });\n }\n }\n\n updateInteractionState(mode: InteractionState) {\n if (this.interactionState === mode) {\n return;\n }\n const oldState = this.interactionState;\n this.interactionState = mode;\n // 处理mode 更新后逻辑\n if (oldState === InteractionState.scrolling && mode === InteractionState.default) {\n // this.table.scenegraph.stage.disableDirtyBounds();\n // this.table.scenegraph.stage.render();\n // this.table.scenegraph.stage.enableDirtyBounds();\n }\n }\n\n updateVerticalScrollBar(yRatio: number) {\n const totalHeight = this._gantt.getAllRowsHeight();\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n this.scroll.verticalBarPos = Math.ceil(yRatio * (totalHeight - this._gantt.scenegraph.height));\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n this._gantt.scenegraph.setY(-this.scroll.verticalBarPos, yRatio === 1);\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n updateHorizontalScrollBar(xRatio: number) {\n const totalWidth = this._gantt._getAllColsWidth();\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = Math.ceil(xRatio * (totalWidth - this._gantt.scenegraph.width));\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n this._gantt.scenegraph.setX(-this.scroll.horizontalBarPos, xRatio === 1);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioY: xRatio\n });\n // this.scroll.horizontalBarPos -= this._gantt.scenegraph.proxy.deltaX;\n // this._gantt.scenegraph.proxy.deltaX = 0;\n\n // this._gantt.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n // scrollTop: this.scroll.verticalBarPos,\n // scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n // scrollDirection: 'horizontal',\n // scrollRatioX: xRatio\n // });\n\n // if (oldHorizontalBarPos !== this.scroll.horizontalBarPos) {\n // this.checkHorizontalScrollBarEnd();\n // }\n }\n\n startMoveTaskBar(target: GanttTaskBarNode, x: number, y: number, offsetY: number) {\n if (target.name === 'task-bar-hover-shadow') {\n target = target.parent;\n }\n this.moveTaskBar.moving = true;\n this.moveTaskBar.target = target;\n this.moveTaskBar.targetStartX = target.attribute.x;\n this.moveTaskBar.startX = x;\n this.moveTaskBar.startY = y;\n this.moveTaskBar.startOffsetY = offsetY;\n }\n\n isMoveingTaskBar() {\n return this.moveTaskBar.moving;\n }\n endMoveTaskBar(x: number) {\n if (this.moveTaskBar.moveTaskBarXInertia.isInertiaScrolling()) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n const taskIndex = getTaskIndexByY(this.moveTaskBar.startOffsetY, this._gantt);\n // const deltaX = x - this.moveTaskBar.startX;\n const deltaX = this.moveTaskBar.deltaX;\n const days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay);\n\n const correctX = days * this._gantt.parsedOptions.colWidthPerDay;\n const targetEndX = this.moveTaskBar.targetStartX + correctX;\n const target = this._gantt.stateManager.moveTaskBar.target;\n // target.setAttribute('x', targetEndX);\n resizeOrMoveTaskBar(taskIndex, target, targetEndX - target.attribute.x, null, this);\n // if (target.attribute.x < this._gantt.stateManager.scrollLeft - 2) {\n // this._gantt.stateManager.setScrollLeft(target.attribute.x);\n // }\n // if(this._gantt.stateManager.scrollLeft===0){\n\n // }\n if (Math.abs(days) >= 1) {\n const taskIndex = getTaskIndexByY(this.moveTaskBar.startOffsetY, this._gantt);\n const oldRecord = this._gantt.getRecordByIndex(taskIndex);\n const oldStartDate = oldRecord[this._gantt.parsedOptions.startDateField];\n const oldEndDate = oldRecord[this._gantt.parsedOptions.endDateField];\n this._gantt._updateDateToTaskRecord('move', days, taskIndex);\n if (this._gantt.hasListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE)) {\n const newRecord = this._gantt.getRecordByIndex(taskIndex);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE, {\n startDate: newRecord[this._gantt.parsedOptions.startDateField],\n endDate: newRecord[this._gantt.parsedOptions.endDateField],\n oldStartDate,\n oldEndDate,\n index: taskIndex,\n record: newRecord\n });\n }\n }\n this._gantt.scenegraph.updateNextFrame();\n this.moveTaskBar.moving = false;\n this.moveTaskBar.target = null;\n this.moveTaskBar.deltaX = 0;\n this.moveTaskBar.moveTaskBarXSpeed = 0;\n }\n dealTaskBarMove(e: FederatedPointerEvent) {\n const target = this.moveTaskBar.target;\n const taskIndex = getTaskIndexByY(this.moveTaskBar.startOffsetY, this._gantt);\n const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n this.moveTaskBar.deltaX += dx;\n // target.setAttribute('x', target.attribute.x + dx);\n resizeOrMoveTaskBar(taskIndex, target, dx, null, this);\n\n // 处理向左拖拽任务条时,整体向左滚动\n if (target.attribute.x <= this._gantt.stateManager.scrollLeft && dx < 0) {\n this.moveTaskBar.moveTaskBarXSpeed = -this._gantt.parsedOptions.colWidthPerDay / 100;\n\n this.moveTaskBar.moveTaskBarXInertia.startInertia(this.moveTaskBar.moveTaskBarXSpeed, 0, 1);\n this.moveTaskBar.moveTaskBarXInertia.setScrollHandle((dx: number, dy: number) => {\n this.moveTaskBar.deltaX += dx;\n resizeOrMoveTaskBar(taskIndex, target, dx, null, this);\n\n this._gantt.stateManager.setScrollLeft(target.attribute.x);\n if (this._gantt.stateManager.scrollLeft === 0) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n });\n } else if (\n target.attribute.x + target.attribute.width >=\n this._gantt.stateManager.scrollLeft + this._gantt.tableNoFrameWidth &&\n dx > 0\n ) {\n // 处理向右拖拽任务条时,整体向右滚动\n this.moveTaskBar.moveTaskBarXSpeed = this._gantt.parsedOptions.colWidthPerDay / 100;\n\n this.moveTaskBar.moveTaskBarXInertia.startInertia(this.moveTaskBar.moveTaskBarXSpeed, 0, 1);\n this.moveTaskBar.moveTaskBarXInertia.setScrollHandle((dx: number, dy: number) => {\n this.moveTaskBar.deltaX += dx;\n resizeOrMoveTaskBar(taskIndex, target, dx, null, this);\n\n this._gantt.stateManager.setScrollLeft(\n target.attribute.x + target.attribute.width - this._gantt.tableNoFrameWidth\n );\n if (this._gantt.stateManager.scrollLeft === this._gantt._getAllColsWidth() - this._gantt.tableNoFrameWidth) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n });\n } else if (this.moveTaskBar.moveTaskBarXInertia.isInertiaScrolling()) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n } else {\n this.moveTaskBar.moveTaskBarXSpeed = 0;\n }\n\n this._gantt.scenegraph.updateNextFrame();\n\n //\n }\n //#region 调整拖拽任务条的大小\n startResizeTaskBar(target: Group, x: number, y: number, startOffsetY: number, onIconName: string) {\n // if (target.name === 'task-bar-hover-shadow') {\n // target = target.parent.parent;\n // }\n this.resizeTaskBar.onIconName = onIconName;\n this.resizeTaskBar.resizing = true;\n this.resizeTaskBar.target = target;\n this.resizeTaskBar.targetStartX = target.attribute.x;\n this.resizeTaskBar.startX = x;\n this.resizeTaskBar.startY = y;\n this.resizeTaskBar.startOffsetY = startOffsetY;\n }\n isResizingTaskBar() {\n return this.resizeTaskBar.resizing;\n }\n endResizeTaskBar(x: number) {\n const direction = this._gantt.stateManager.resizeTaskBar.onIconName;\n const deltaX = x - this.resizeTaskBar.startX;\n if (Math.abs(deltaX) >= 1) {\n let diff_days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay);\n diff_days = direction === 'left' ? -diff_days : diff_days;\n\n const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target;\n const rect = this._gantt.stateManager.resizeTaskBar.target.barRect;\n const progressRect = this._gantt.stateManager.resizeTaskBar.target.progressRect;\n const taskIndex = getTaskIndexByY(this.resizeTaskBar.startOffsetY, this._gantt);\n const oldRecord = this._gantt.getRecordByIndex(taskIndex);\n const oldStartDate = oldRecord[this._gantt.parsedOptions.startDateField];\n const oldEndDate = oldRecord[this._gantt.parsedOptions.endDateField];\n const { taskDays, progress } = this._gantt.getTaskInfoByTaskListIndex(taskIndex);\n if (diff_days < 0 && taskDays + diff_days <= 0) {\n diff_days = 1 - taskDays;\n }\n const correctX = (direction === 'left' ? -diff_days : diff_days) * this._gantt.parsedOptions.colWidthPerDay;\n const targetEndX = this.resizeTaskBar.targetStartX + correctX;\n\n const taskBarSize = this._gantt.parsedOptions.colWidthPerDay * (taskDays + diff_days);\n if (direction === 'left') {\n // taskBarGroup.setAttribute('x', targetEndX);\n // taskBarGroup.setAttribute('width', taskBarSize);\n resizeOrMoveTaskBar(taskIndex, taskBarGroup, targetEndX - taskBarGroup.attribute.x, taskBarSize, this);\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n this._gantt._updateDateToTaskRecord('start-move', -diff_days, taskIndex);\n } else if (direction === 'right') {\n // taskBarGroup.setAttribute('width', taskBarSize);\n resizeOrMoveTaskBar(taskIndex, taskBarGroup, 0, taskBarSize, this);\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n this._gantt._updateDateToTaskRecord('end-move', diff_days, taskIndex);\n }\n this.showTaskBarHover();\n reCreateCustomNode(this._gantt, taskBarGroup, taskIndex);\n this.resizeTaskBar.resizing = false;\n this.resizeTaskBar.target = null;\n\n if (Math.abs(diff_days) >= 1 && this._gantt.hasListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE)) {\n const newRecord = this._gantt.getRecordByIndex(taskIndex);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE, {\n startDate: newRecord[this._gantt.parsedOptions.startDateField],\n endDate: newRecord[this._gantt.parsedOptions.endDateField],\n oldStartDate,\n oldEndDate,\n index: taskIndex,\n record: newRecord\n });\n }\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n dealTaskBarResize(e: FederatedPointerEvent) {\n const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n // debugger;\n const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target;\n const rect = taskBarGroup.barRect;\n const progressRect = taskBarGroup.progressRect;\n const textLabel = taskBarGroup.textLabel;\n\n const progressField = this._gantt.parsedOptions.progressField;\n const taskIndex = getTaskIndexByY(this.resizeTaskBar.startOffsetY, this._gantt);\n const taskRecord = this._gantt.getRecordByIndex(taskIndex);\n const progress = taskRecord[progressField];\n\n let diffWidth = this._gantt.stateManager.resizeTaskBar.onIconName === 'left' ? -dx : dx;\n let taskBarSize = taskBarGroup.attribute.width + diffWidth;\n if (diffWidth < 0 && taskBarSize <= this._gantt.parsedOptions.colWidthPerDay) {\n diffWidth = this._gantt.parsedOptions.colWidthPerDay - taskBarGroup.attribute.width;\n taskBarSize += diffWidth;\n }\n\n // taskBarGroup.setAttribute('width', taskBarSize);\n // if (this._gantt.stateManager.resizeTaskBar.onIconName === 'left') {\n // taskBarGroup.setAttribute('x', taskBarGroup.attribute.x - diffWidth);\n // }\n resizeOrMoveTaskBar(\n taskIndex,\n taskBarGroup,\n this._gantt.stateManager.resizeTaskBar.onIconName === 'left' ? -diffWidth : 0,\n taskBarSize,\n this\n );\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n\n textLabel?.setAttribute('maxLineWidth', taskBarSize - TASKBAR_HOVER_ICON_WIDTH * 2);\n\n this.showTaskBarHover();\n\n reCreateCustomNode(this._gantt, taskBarGroup, taskIndex);\n this._gantt.scenegraph.updateNextFrame();\n //\n }\n //#endregion\n //#region 生成关联线的交互处理\n startCreateDependencyLine(target: Group, x: number, y: number, startOffsetY: number, position: 'left' | 'right') {\n // if (target.name === 'task-bar-hover-shadow') {\n // target = target.parent.parent;\n // }\n this.creatingDenpendencyLink.creating = true;\n this.creatingDenpendencyLink.startClickedPoint = target;\n this.creatingDenpendencyLink.startX = x;\n this.creatingDenpendencyLink.startY = y;\n this.creatingDenpendencyLink.startOffsetY = startOffsetY;\n this.creatingDenpendencyLink.firstTaskBarPosition = position;\n this.highlightLinkPointNode(target);\n }\n isCreatingDependencyLine() {\n return this.creatingDenpendencyLink.creating;\n }\n endCreateDependencyLine(offsetY: number) {\n const taskKeyField = this._gantt.parsedOptions.taskKeyField;\n const fromTaskIndex = getTaskIndexByY(this.creatingDenpendencyLink.startOffsetY, this._gantt);\n const toTaskIndex = getTaskIndexByY(offsetY, this._gantt);\n const fromRecord = this._gantt.getRecordByIndex(fromTaskIndex);\n const linkedFromTaskKey = fromRecord[taskKeyField];\n const toRecord = this._gantt.getRecordByIndex(toTaskIndex);\n const linkedToTaskKey = toRecord[taskKeyField];\n const link = {\n linkedFromTaskKey,\n linkedToTaskKey,\n type:\n this.creatingDenpendencyLink.firstTaskBarPosition === 'left' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'left'\n ? DependencyType.StartToStart\n : this.creatingDenpendencyLink.firstTaskBarPosition === 'right' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'left'\n ? DependencyType.FinishToStart\n : this.creatingDenpendencyLink.firstTaskBarPosition === 'right' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'right'\n ? DependencyType.FinishToFinish\n : DependencyType.StartToFinish\n };\n this._gantt.addLink(link);\n // const oldRecord = this._gantt.getRecordByIndex(fromTaskIndex);\n this.hideTaskBarSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n this.creatingDenpendencyLink.creating = false;\n return link;\n }\n dealCreateDependencyLine(e: FederatedPointerEvent) {\n const x1 = this.creatingDenpendencyLink.startX;\n const y1 = this.creatingDenpendencyLink.startY;\n const x2 = e.x;\n const y2 = e.y;\n const dx = x2 - x1;\n const dy = y2 - y1;\n // debugger;\n const startClickedPoint = this.creatingDenpendencyLink.startClickedPoint;\n const x = startClickedPoint.attribute.x + startClickedPoint.attribute.width / 2;\n const y = startClickedPoint.attribute.y + startClickedPoint.attribute.height / 2;\n this._gantt.scenegraph.taskBar.updateCreatingDependencyLine(x, y, x + dx, y + dy);\n this._gantt.scenegraph.updateNextFrame();\n //\n }\n //#endregion\n //#region 调整左侧任务列表表格整体的宽度\n startResizeTableWidth(e: MouseEvent) {\n this.resizeTableWidth.resizing = true;\n this.resizeTableWidth.lastX = e.pageX;\n //this.resizeTableWidth.startWidth = this._gantt.tableNoFrameWidth;\n }\n isResizingTableWidth() {\n return this.resizeTableWidth.resizing;\n }\n endResizeTableWidth() {\n this.resizeTableWidth.resizing = false;\n }\n\n dealResizeTableWidth(e: MouseEvent) {\n if (!this.resizeTableWidth.resizing) {\n return;\n }\n const deltaX = e.pageX - this.resizeTableWidth.lastX;\n if (Math.abs(deltaX) >= 1) {\n const startWidth = this._gantt.taskTableWidth;\n let width = startWidth + deltaX;\n const maxWidth = Math.min(\n this._gantt.taskListTableInstance.getAllColsWidth() + this._gantt.parsedOptions.outerFrameStyle.borderLineWidth,\n this._gantt.options.taskListTable.maxTableWidth ?? 100000\n );\n const minWidth = Math.max(\n this._gantt.parsedOptions.outerFrameStyle.borderLineWidth,\n this._gantt.options.taskListTable.minTableWidth ?? 0\n );\n if (deltaX > 0 && width > maxWidth) {\n width = maxWidth;\n }\n if (deltaX < 0 && width < minWidth) {\n width = minWidth;\n }\n this._gantt.taskTableWidth = width;\n this._gantt.element.style.left = this._gantt.taskTableWidth ? `${this._gantt.taskTableWidth}px` : '0px';\n this._gantt.verticalSplitResizeLine.style.left = this._gantt.taskTableWidth\n ? `${this._gantt.taskTableWidth - 7}px`\n : '0px';\n this._gantt._resize();\n this.resizeTableWidth.lastX = e.pageX;\n }\n }\n //#endregion\n\n showTaskBarHover() {\n const target = this._gantt.stateManager.hoverTaskBar.target;\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, target);\n this._gantt.scenegraph.updateNextFrame();\n }\n hideTaskBarHover(e: FederatedPointerEvent) {\n this._gantt.stateManager.hoverTaskBar.target = null;\n this._gantt.scenegraph.taskBar.hideHoverBar();\n this._gantt.scenegraph.updateNextFrame();\n }\n\n showTaskBarSelectedBorder() {\n const linkCreatable = this._gantt.parsedOptions.dependencyLinkCreatable;\n const target = this._gantt.stateManager.selectedTaskBar.target;\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.createSelectedBorder(x, y, width, height, target, linkCreatable);\n this._gantt.scenegraph.updateNextFrame();\n }\n\n hideTaskBarSelectedBorder() {\n this._gantt.stateManager.selectedTaskBar.target = null;\n this._gantt.scenegraph.taskBar.removeSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n showSecondTaskBarSelectedBorder() {\n const target = this._gantt.stateManager.creatingDenpendencyLink.secondTaskBarNode;\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.createSelectedBorder(x, y, width, height, target, true);\n this._gantt.scenegraph.updateNextFrame();\n }\n hideSecondTaskBarSelectedBorder() {\n this._gantt.stateManager.creatingDenpendencyLink.secondTaskBarNode = null;\n this._gantt.scenegraph.taskBar.removeSecondSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n showDependencyLinkSelectedLine() {\n const link = this._gantt.stateManager.selectedDenpendencyLink.link;\n this._gantt.scenegraph.dependencyLink.createSelectedLinkLine(link);\n\n const { taskKeyField, dependencyLinks } = this._gantt.parsedOptions;\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n const linkedToTaskRecord = findRecordByTaskKey(this._gantt.records, taskKeyField, linkedToTaskKey);\n const linkedFromTaskRecord = findRecordByTaskKey(this._gantt.records, taskKeyField, linkedFromTaskKey);\n const linkedFromTaskShowIndex = this._gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n const linkedToTaskShowIndex = this._gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n const fromTaskNode = this._gantt.scenegraph.taskBar.getTaskBarNodeByIndex(\n linkedFromTaskShowIndex\n ) as GanttTaskBarNode;\n this._gantt.scenegraph.taskBar.createSelectedBorder(\n fromTaskNode.attribute.x,\n fromTaskNode.attribute.y,\n fromTaskNode.attribute.width,\n fromTaskNode.attribute.height,\n fromTaskNode,\n false\n );\n const toTaskNode = this._gantt.scenegraph.taskBar.getTaskBarNodeByIndex(linkedToTaskShowIndex) as GanttTaskBarNode;\n this._gantt.scenegraph.taskBar.createSelectedBorder(\n toTaskNode.attribute.x,\n toTaskNode.attribute.y,\n toTaskNode.attribute.width,\n toTaskNode.attribute.height,\n toTaskNode,\n false\n );\n\n this._gantt.scenegraph.updateNextFrame();\n }\n hideDependencyLinkSelectedLine() {\n this._gantt.stateManager.selectedDenpendencyLink.link = null;\n this._gantt.scenegraph.dependencyLink.removeSelectedLinkLine();\n this._gantt.scenegraph.taskBar.removeSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n highlightLinkPointNode(linkPointGroup: Group) {\n if (linkPointGroup?.children.length > 0) {\n const circle = linkPointGroup.children[0];\n circle.setAttribute('fill', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.fillColor);\n circle.setAttribute('stroke', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.strokeColor);\n circle.setAttribute('radius', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.radius);\n circle.setAttribute('lineWidth', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.strokeWidth);\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n unhighlightLinkPointNode(linkPointGroup: Group) {\n if (linkPointGroup?.children.length > 0) {\n const circle = linkPointGroup.children[0];\n circle.setAttribute('fill', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.fillColor);\n circle.setAttribute('stroke', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeColor);\n circle.setAttribute('radius', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.radius);\n circle.setAttribute('lineWidth', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeWidth);\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n}\n\nfunction reCreateCustomNode(gantt: Gantt, taskBarGroup: Group, taskIndex: number) {\n const taskBarCustomLayout = gantt.parsedOptions.taskBarCustomLayout;\n if (taskBarCustomLayout) {\n let customLayoutObj;\n if (typeof taskBarCustomLayout === 'function') {\n const { startDate, endDate, taskDays, progress, taskRecord } = gantt.getTaskInfoByTaskListIndex(taskIndex);\n const arg = {\n width: taskBarGroup.attribute.width,\n height: taskBarGroup.attribute.height,\n index: taskIndex,\n startDate,\n endDate,\n taskDays,\n progress,\n taskRecord,\n ganttInstance: gantt\n };\n customLayoutObj = taskBarCustomLayout(arg);\n } else {\n customLayoutObj = taskBarCustomLayout;\n }\n if (customLayoutObj) {\n const rootContainer = customLayoutObj.rootContainer;\n rootContainer.name = 'task-bar-custom-render';\n const oldCustomIndex = taskBarGroup.children.findIndex((node: any) => {\n return node.name === 'task-bar-custom-render';\n });\n const oldCustomNode = taskBarGroup.children[oldCustomIndex] as Group;\n taskBarGroup.removeChild(oldCustomNode);\n taskBarGroup.insertInto(rootContainer, oldCustomIndex);\n }\n }\n}\n\nfunction resizeOrMoveTaskBar(\n taskIndex: number,\n target: GanttTaskBarNode,\n dx: number,\n newWidth: number,\n state: StateManager\n) {\n // const taskIndex = getTaskIndexByY(state.moveTaskBar.startOffsetY, state._gantt);\n const record = state._gantt.getRecordByIndex(taskIndex);\n if (dx) {\n target.setAttribute('x', target.attribute.x + dx);\n }\n if (newWidth) {\n target.setAttribute('width', newWidth);\n }\n const vtable_gantt_linkedTo = record.vtable_gantt_linkedTo;\n const vtable_gantt_linkedFrom = record.vtable_gantt_linkedFrom;\n for (let i = 0; i < vtable_gantt_linkedTo?.length; i++) {\n const link = vtable_gantt_linkedTo[i];\n const linkLineNode = link.vtable_gantt_linkLineNode;\n const lineArrowNode = link.vtable_gantt_linkArrowNode;\n\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n const { taskKeyField, minDate } = state._gantt.parsedOptions;\n const linkedFromTaskRecord = findRecordByTaskKey(state._gantt.records, taskKeyField, linkedFromTaskKey);\n\n const { startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate } =\n state._gantt.getTaskInfoByTaskListIndex(taskIndex);\n const { startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate } =\n state._gantt.getTaskInfoByTaskListIndex(linkedFromTaskRecord.index);\n const { linePoints, arrowPoints } = updateLinkLinePoints(\n type,\n linkedFromTaskStartDate,\n linkedFromTaskEndDate,\n linkedFromTaskRecord.index,\n linkedToTaskStartDate,\n linkedToTaskEndDate,\n taskIndex,\n minDate,\n state._gantt.parsedOptions.rowHeight,\n state._gantt.parsedOptions.colWidthPerDay,\n null,\n target\n );\n linkLineNode.setAttribute('points', linePoints);\n lineArrowNode.setAttribute('points', arrowPoints);\n }\n\n for (let i = 0; i < vtable_gantt_linkedFrom?.length; i++) {\n const link = vtable_gantt_linkedFrom[i];\n const linkLineNode = link.vtable_gantt_linkLineNode;\n const lineArrowNode = link.vtable_gantt_linkArrowNode;\n\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n const { taskKeyField, minDate } = state._gantt.parsedOptions;\n const linkedToTaskRecord = findRecordByTaskKey(state._gantt.records, taskKeyField, linkedToTaskKey);\n\n const { startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate } =\n state._gantt.getTaskInfoByTaskListIndex(taskIndex);\n const { startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate } = state._gantt.getTaskInfoByTaskListIndex(\n linkedToTaskRecord.index\n );\n const { linePoints, arrowPoints } = updateLinkLinePoints(\n type,\n linkedFromTaskStartDate,\n linkedFromTaskEndDate,\n taskIndex,\n linkedToTaskStartDate,\n linkedToTaskEndDate,\n linkedToTaskRecord.index,\n minDate,\n state._gantt.parsedOptions.rowHeight,\n state._gantt.parsedOptions.colWidthPerDay,\n target,\n null\n );\n\n linkLineNode.setAttribute('points', linePoints);\n lineArrowNode.setAttribute('points', arrowPoints);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/state/state-manager.ts"],"names":[],"mappings":"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","file":"state-manager.js","sourcesContent":["import { clone, cloneDeep, isValid } from '@visactor/vutils';\nimport type { Gantt } from '../Gantt';\nimport type { ITaskLink } from '../ts-types';\nimport { InteractionState, GANTT_EVENT_TYPE, DependencyType } from '../ts-types';\nimport type { Group, FederatedPointerEvent, Polygon, Line, Circle } from '@visactor/vtable/es/vrender';\nimport {\n syncEditCellFromTable,\n syncScrollStateFromTable,\n syncScrollStateToTable,\n syncDragOrderFromTable,\n syncTreeChangeFromTable,\n syncSortFromTable\n} from './gantt-table-sync';\nimport { findRecordByTaskKey, getTaskIndexByY } from '../gantt-helper';\nimport { debounce } from '../tools/debounce';\nimport type { GanttTaskBarNode } from '../scenegraph/gantt-node';\nimport { TASKBAR_HOVER_ICON_WIDTH } from '../scenegraph/task-bar';\nimport { Inertia } from '../tools/inertia';\nimport { generateLinkLinePoints, updateLinkLinePoints } from '../scenegraph/dependency-link';\nexport class StateManager {\n _gantt: Gantt;\n\n scroll: {\n horizontalBarPos: number;\n verticalBarPos: number;\n };\n fastScrolling: boolean;\n /**\n * Default 默认展示\n * grabing 拖拽中\n * -Resize column 改变列宽\n * -column move 调整列顺序\n * -drag select 拖拽多选\n * Scrolling 滚动中\n */\n interactionState: InteractionState = InteractionState.default;\n\n moveTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n deltaX: number;\n targetStartX: number;\n startOffsetY: number;\n moving: boolean;\n target: GanttTaskBarNode;\n moveTaskBarXSpeed: number;\n moveTaskBarXInertia: Inertia;\n };\n\n hoverTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n targetStartX: number;\n target: GanttTaskBarNode;\n };\n resizeTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n /** 刚开始时 任务条节点的offsetX */\n startOffsetY: number;\n targetStartX: number;\n target: GanttTaskBarNode;\n resizing: boolean;\n onIconName: string;\n };\n selectedTaskBar: {\n target: GanttTaskBarNode;\n };\n resizeTableWidth: {\n /** x坐标是相对table内坐标 */\n lastX: number;\n resizing: boolean;\n };\n\n selectedDenpendencyLink: {\n link: ITaskLink & { vtable_gantt_linkArrowNode: Polygon; vtable_gantt_linkLineNode: Line };\n };\n creatingDenpendencyLink: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n startOffsetY: number;\n targetStartX: number;\n startClickedPoint: Group;\n creating: boolean;\n firstTaskBarPosition: 'left' | 'right';\n secondTaskBarPosition: 'left' | 'right';\n secondTaskBarNode: GanttTaskBarNode;\n lastHighLightLinkPoint: Group;\n };\n // 供滚动重置为default使用\n resetInteractionState = debounce(() => {\n this.updateInteractionState(InteractionState.default);\n }, 100);\n constructor(gantt: Gantt) {\n this._gantt = gantt;\n this.scroll = {\n horizontalBarPos: 0,\n verticalBarPos: 0\n };\n this.moveTaskBar = {\n targetStartX: null,\n deltaX: 0,\n startOffsetY: null,\n startX: null,\n startY: null,\n moving: false,\n target: null,\n moveTaskBarXSpeed: 0,\n moveTaskBarXInertia: new Inertia()\n };\n\n this.hoverTaskBar = {\n targetStartX: null,\n startX: null,\n target: null\n };\n\n this.selectedTaskBar = {\n target: null\n };\n this.resizeTaskBar = {\n startOffsetY: null,\n targetStartX: null,\n startX: null,\n startY: null,\n target: null,\n resizing: false,\n onIconName: ''\n };\n this.resizeTableWidth = {\n lastX: null,\n resizing: false\n };\n this.selectedDenpendencyLink = {\n link: null\n };\n this.creatingDenpendencyLink = {\n startClickedPoint: null,\n startX: null,\n startY: null,\n startOffsetY: null,\n targetStartX: null,\n creating: false,\n secondTaskBarNode: null\n };\n\n this.updateVerticalScrollBar = this.updateVerticalScrollBar.bind(this);\n this.updateHorizontalScrollBar = this.updateHorizontalScrollBar.bind(this);\n\n syncScrollStateFromTable(this._gantt);\n syncEditCellFromTable(this._gantt);\n syncDragOrderFromTable(this._gantt);\n syncTreeChangeFromTable(this._gantt);\n syncSortFromTable(this._gantt);\n }\n\n setScrollTop(top: number, triggerEvent: boolean = true) {\n // 矫正top值范围\n const totalHeight = this._gantt.getAllRowsHeight();\n top = Math.max(0, Math.min(top, totalHeight - this._gantt.scenegraph.height));\n top = Math.ceil(top);\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n this.scroll.verticalBarPos = top;\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n // 设置scenegraph坐标\n this._gantt.scenegraph.setY(-top);\n\n // 更新scrollbar位置\n const yRatio = top / (totalHeight - this._gantt.scenegraph.height);\n this._gantt.scenegraph.scrollbarComponent.updateVerticalScrollBarPos(yRatio);\n\n if (oldVerticalBarPos !== top && triggerEvent) {\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n }\n get scrollLeft() {\n return this.scroll.horizontalBarPos;\n }\n get scrollTop() {\n return this.scroll.verticalBarPos;\n }\n setScrollLeft(left: number, triggerEvent: boolean = true) {\n // 矫正left值范围\n const totalWidth = this._gantt._getAllColsWidth();\n\n left = Math.max(0, Math.min(left, totalWidth - this._gantt.scenegraph.width));\n left = Math.ceil(left);\n // 滚动期间清空选中清空\n // if (left !== this.scroll.horizontalBarPos) {\n // this.updateHoverPos(-1, -1);\n // }\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = left;\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n\n // 设置scenegraph坐标\n this._gantt.scenegraph.setX(-left);\n\n // 更新scrollbar位置\n const xRatio = left / (totalWidth - this._gantt.scenegraph.width);\n this._gantt.scenegraph.scrollbarComponent.updateHorizontalScrollBarPos(xRatio);\n\n if (oldHorizontalBarPos !== left && triggerEvent) {\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioX: xRatio\n });\n }\n }\n\n updateInteractionState(mode: InteractionState) {\n if (this.interactionState === mode) {\n return;\n }\n const oldState = this.interactionState;\n this.interactionState = mode;\n // 处理mode 更新后逻辑\n if (oldState === InteractionState.scrolling && mode === InteractionState.default) {\n // this.table.scenegraph.stage.disableDirtyBounds();\n // this.table.scenegraph.stage.render();\n // this.table.scenegraph.stage.enableDirtyBounds();\n }\n }\n\n updateVerticalScrollBar(yRatio: number) {\n const totalHeight = this._gantt.getAllRowsHeight();\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n this.scroll.verticalBarPos = Math.ceil(yRatio * (totalHeight - this._gantt.scenegraph.height));\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n this._gantt.scenegraph.setY(-this.scroll.verticalBarPos, yRatio === 1);\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n updateHorizontalScrollBar(xRatio: number) {\n const totalWidth = this._gantt._getAllColsWidth();\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = Math.ceil(xRatio * (totalWidth - this._gantt.scenegraph.width));\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n this._gantt.scenegraph.setX(-this.scroll.horizontalBarPos, xRatio === 1);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioY: xRatio\n });\n // this.scroll.horizontalBarPos -= this._gantt.scenegraph.proxy.deltaX;\n // this._gantt.scenegraph.proxy.deltaX = 0;\n\n // this._gantt.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n // scrollTop: this.scroll.verticalBarPos,\n // scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n // scrollDirection: 'horizontal',\n // scrollRatioX: xRatio\n // });\n\n // if (oldHorizontalBarPos !== this.scroll.horizontalBarPos) {\n // this.checkHorizontalScrollBarEnd();\n // }\n }\n\n startMoveTaskBar(target: GanttTaskBarNode, x: number, y: number, offsetY: number) {\n if (target.name === 'task-bar-hover-shadow') {\n target = target.parent;\n }\n this.moveTaskBar.moving = true;\n this.moveTaskBar.target = target;\n this.moveTaskBar.targetStartX = target.attribute.x;\n this.moveTaskBar.startX = x;\n this.moveTaskBar.startY = y;\n this.moveTaskBar.startOffsetY = offsetY;\n }\n\n isMoveingTaskBar() {\n return this.moveTaskBar.moving;\n }\n endMoveTaskBar(x: number) {\n if (this.moveTaskBar.moveTaskBarXInertia.isInertiaScrolling()) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n const taskIndex = getTaskIndexByY(this.moveTaskBar.startOffsetY, this._gantt);\n // const deltaX = x - this.moveTaskBar.startX;\n const deltaX = this.moveTaskBar.deltaX;\n const days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay);\n\n const correctX = days * this._gantt.parsedOptions.colWidthPerDay;\n const targetEndX = this.moveTaskBar.targetStartX + correctX;\n const target = this._gantt.stateManager.moveTaskBar.target;\n // target.setAttribute('x', targetEndX);\n resizeOrMoveTaskBar(taskIndex, target, targetEndX - target.attribute.x, null, this);\n // if (target.attribute.x < this._gantt.stateManager.scrollLeft - 2) {\n // this._gantt.stateManager.setScrollLeft(target.attribute.x);\n // }\n // if(this._gantt.stateManager.scrollLeft===0){\n\n // }\n if (Math.abs(days) >= 1) {\n const taskIndex = getTaskIndexByY(this.moveTaskBar.startOffsetY, this._gantt);\n const oldRecord = this._gantt.getRecordByIndex(taskIndex);\n const oldStartDate = oldRecord[this._gantt.parsedOptions.startDateField];\n const oldEndDate = oldRecord[this._gantt.parsedOptions.endDateField];\n this._gantt._updateDateToTaskRecord('move', days, taskIndex);\n if (this._gantt.hasListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE)) {\n const newRecord = this._gantt.getRecordByIndex(taskIndex);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE, {\n startDate: newRecord[this._gantt.parsedOptions.startDateField],\n endDate: newRecord[this._gantt.parsedOptions.endDateField],\n oldStartDate,\n oldEndDate,\n index: taskIndex,\n record: newRecord\n });\n }\n }\n this._gantt.scenegraph.updateNextFrame();\n this.moveTaskBar.moving = false;\n this.moveTaskBar.target = null;\n this.moveTaskBar.deltaX = 0;\n this.moveTaskBar.moveTaskBarXSpeed = 0;\n }\n dealTaskBarMove(e: FederatedPointerEvent) {\n const target = this.moveTaskBar.target;\n const taskIndex = getTaskIndexByY(this.moveTaskBar.startOffsetY, this._gantt);\n const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n this.moveTaskBar.deltaX += dx;\n // target.setAttribute('x', target.attribute.x + dx);\n resizeOrMoveTaskBar(taskIndex, target, dx, null, this);\n\n // 处理向左拖拽任务条时,整体向左滚动\n if (target.attribute.x <= this._gantt.stateManager.scrollLeft && dx < 0) {\n this.moveTaskBar.moveTaskBarXSpeed = -this._gantt.parsedOptions.colWidthPerDay / 100;\n\n this.moveTaskBar.moveTaskBarXInertia.startInertia(this.moveTaskBar.moveTaskBarXSpeed, 0, 1);\n this.moveTaskBar.moveTaskBarXInertia.setScrollHandle((dx: number, dy: number) => {\n this.moveTaskBar.deltaX += dx;\n resizeOrMoveTaskBar(taskIndex, target, dx, null, this);\n\n this._gantt.stateManager.setScrollLeft(target.attribute.x);\n if (this._gantt.stateManager.scrollLeft === 0) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n });\n } else if (\n target.attribute.x + target.attribute.width >=\n this._gantt.stateManager.scrollLeft + this._gantt.tableNoFrameWidth &&\n dx > 0\n ) {\n // 处理向右拖拽任务条时,整体向右滚动\n this.moveTaskBar.moveTaskBarXSpeed = this._gantt.parsedOptions.colWidthPerDay / 100;\n\n this.moveTaskBar.moveTaskBarXInertia.startInertia(this.moveTaskBar.moveTaskBarXSpeed, 0, 1);\n this.moveTaskBar.moveTaskBarXInertia.setScrollHandle((dx: number, dy: number) => {\n this.moveTaskBar.deltaX += dx;\n resizeOrMoveTaskBar(taskIndex, target, dx, null, this);\n\n this._gantt.stateManager.setScrollLeft(\n target.attribute.x + target.attribute.width - this._gantt.tableNoFrameWidth\n );\n if (this._gantt.stateManager.scrollLeft === this._gantt._getAllColsWidth() - this._gantt.tableNoFrameWidth) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n });\n } else if (this.moveTaskBar.moveTaskBarXInertia.isInertiaScrolling()) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n } else {\n this.moveTaskBar.moveTaskBarXSpeed = 0;\n }\n\n this._gantt.scenegraph.updateNextFrame();\n\n //\n }\n //#region 调整拖拽任务条的大小\n startResizeTaskBar(target: Group, x: number, y: number, startOffsetY: number, onIconName: string) {\n // if (target.name === 'task-bar-hover-shadow') {\n // target = target.parent.parent;\n // }\n this.resizeTaskBar.onIconName = onIconName;\n this.resizeTaskBar.resizing = true;\n this.resizeTaskBar.target = target;\n this.resizeTaskBar.targetStartX = target.attribute.x;\n this.resizeTaskBar.startX = x;\n this.resizeTaskBar.startY = y;\n this.resizeTaskBar.startOffsetY = startOffsetY;\n }\n isResizingTaskBar() {\n return this.resizeTaskBar.resizing;\n }\n endResizeTaskBar(x: number) {\n const direction = this._gantt.stateManager.resizeTaskBar.onIconName;\n const deltaX = x - this.resizeTaskBar.startX;\n if (Math.abs(deltaX) >= 1) {\n let diff_days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay);\n diff_days = direction === 'left' ? -diff_days : diff_days;\n\n const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target;\n const rect = this._gantt.stateManager.resizeTaskBar.target.barRect;\n const progressRect = this._gantt.stateManager.resizeTaskBar.target.progressRect;\n const taskIndex = getTaskIndexByY(this.resizeTaskBar.startOffsetY, this._gantt);\n const oldRecord = this._gantt.getRecordByIndex(taskIndex);\n const oldStartDate = oldRecord[this._gantt.parsedOptions.startDateField];\n const oldEndDate = oldRecord[this._gantt.parsedOptions.endDateField];\n const { taskDays, progress } = this._gantt.getTaskInfoByTaskListIndex(taskIndex);\n if (diff_days < 0 && taskDays + diff_days <= 0) {\n diff_days = 1 - taskDays;\n }\n const correctX = (direction === 'left' ? -diff_days : diff_days) * this._gantt.parsedOptions.colWidthPerDay;\n const targetEndX = this.resizeTaskBar.targetStartX + correctX;\n\n const taskBarSize = this._gantt.parsedOptions.colWidthPerDay * (taskDays + diff_days);\n if (direction === 'left') {\n // taskBarGroup.setAttribute('x', targetEndX);\n // taskBarGroup.setAttribute('width', taskBarSize);\n resizeOrMoveTaskBar(taskIndex, taskBarGroup, targetEndX - taskBarGroup.attribute.x, taskBarSize, this);\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n this._gantt._updateDateToTaskRecord('start-move', -diff_days, taskIndex);\n } else if (direction === 'right') {\n // taskBarGroup.setAttribute('width', taskBarSize);\n resizeOrMoveTaskBar(taskIndex, taskBarGroup, 0, taskBarSize, this);\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n this._gantt._updateDateToTaskRecord('end-move', diff_days, taskIndex);\n }\n this.showTaskBarHover();\n reCreateCustomNode(this._gantt, taskBarGroup, taskIndex);\n this.resizeTaskBar.resizing = false;\n this.resizeTaskBar.target = null;\n\n if (Math.abs(diff_days) >= 1 && this._gantt.hasListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE)) {\n const newRecord = this._gantt.getRecordByIndex(taskIndex);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE, {\n startDate: newRecord[this._gantt.parsedOptions.startDateField],\n endDate: newRecord[this._gantt.parsedOptions.endDateField],\n oldStartDate,\n oldEndDate,\n index: taskIndex,\n record: newRecord\n });\n }\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n dealTaskBarResize(e: FederatedPointerEvent) {\n const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n // debugger;\n const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target;\n const rect = taskBarGroup.barRect;\n const progressRect = taskBarGroup.progressRect;\n const textLabel = taskBarGroup.textLabel;\n\n const progressField = this._gantt.parsedOptions.progressField;\n const taskIndex = getTaskIndexByY(this.resizeTaskBar.startOffsetY, this._gantt);\n const taskRecord = this._gantt.getRecordByIndex(taskIndex);\n const progress = taskRecord[progressField];\n\n let diffWidth = this._gantt.stateManager.resizeTaskBar.onIconName === 'left' ? -dx : dx;\n let taskBarSize = taskBarGroup.attribute.width + diffWidth;\n if (diffWidth < 0 && taskBarSize <= this._gantt.parsedOptions.colWidthPerDay) {\n diffWidth = this._gantt.parsedOptions.colWidthPerDay - taskBarGroup.attribute.width;\n taskBarSize += diffWidth;\n }\n\n // taskBarGroup.setAttribute('width', taskBarSize);\n // if (this._gantt.stateManager.resizeTaskBar.onIconName === 'left') {\n // taskBarGroup.setAttribute('x', taskBarGroup.attribute.x - diffWidth);\n // }\n resizeOrMoveTaskBar(\n taskIndex,\n taskBarGroup,\n this._gantt.stateManager.resizeTaskBar.onIconName === 'left' ? -diffWidth : 0,\n taskBarSize,\n this\n );\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n\n textLabel?.setAttribute('maxLineWidth', taskBarSize - TASKBAR_HOVER_ICON_WIDTH * 2);\n\n this.showTaskBarHover();\n\n reCreateCustomNode(this._gantt, taskBarGroup, taskIndex);\n this._gantt.scenegraph.updateNextFrame();\n //\n }\n //#endregion\n //#region 生成关联线的交互处理\n startCreateDependencyLine(target: Group, x: number, y: number, startOffsetY: number, position: 'left' | 'right') {\n // if (target.name === 'task-bar-hover-shadow') {\n // target = target.parent.parent;\n // }\n this.creatingDenpendencyLink.creating = true;\n this.creatingDenpendencyLink.startClickedPoint = target;\n this.creatingDenpendencyLink.startX = x;\n this.creatingDenpendencyLink.startY = y;\n this.creatingDenpendencyLink.startOffsetY = startOffsetY;\n this.creatingDenpendencyLink.firstTaskBarPosition = position;\n this.highlightLinkPointNode(target);\n }\n isCreatingDependencyLine() {\n return this.creatingDenpendencyLink.creating;\n }\n endCreateDependencyLine(offsetY: number) {\n const taskKeyField = this._gantt.parsedOptions.taskKeyField;\n const fromTaskIndex = getTaskIndexByY(this.creatingDenpendencyLink.startOffsetY, this._gantt);\n const toTaskIndex = getTaskIndexByY(offsetY, this._gantt);\n const fromRecord = this._gantt.getRecordByIndex(fromTaskIndex);\n const linkedFromTaskKey = fromRecord[taskKeyField];\n const toRecord = this._gantt.getRecordByIndex(toTaskIndex);\n const linkedToTaskKey = toRecord[taskKeyField];\n const link = {\n linkedFromTaskKey,\n linkedToTaskKey,\n type:\n this.creatingDenpendencyLink.firstTaskBarPosition === 'left' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'left'\n ? DependencyType.StartToStart\n : this.creatingDenpendencyLink.firstTaskBarPosition === 'right' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'left'\n ? DependencyType.FinishToStart\n : this.creatingDenpendencyLink.firstTaskBarPosition === 'right' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'right'\n ? DependencyType.FinishToFinish\n : DependencyType.StartToFinish\n };\n this._gantt.addLink(link);\n // const oldRecord = this._gantt.getRecordByIndex(fromTaskIndex);\n this.hideTaskBarSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n this.creatingDenpendencyLink.creating = false;\n return link;\n }\n dealCreateDependencyLine(e: FederatedPointerEvent) {\n const x1 = this.creatingDenpendencyLink.startX;\n const y1 = this.creatingDenpendencyLink.startY;\n const x2 = e.x;\n const y2 = e.y;\n const dx = x2 - x1;\n const dy = y2 - y1;\n // debugger;\n const startClickedPoint = this.creatingDenpendencyLink.startClickedPoint;\n const x = startClickedPoint.attribute.x + startClickedPoint.attribute.width / 2;\n const y = startClickedPoint.attribute.y + startClickedPoint.attribute.height / 2;\n this._gantt.scenegraph.taskBar.updateCreatingDependencyLine(x, y, x + dx, y + dy);\n this._gantt.scenegraph.updateNextFrame();\n //\n }\n //#endregion\n //#region 调整左侧任务列表表格整体的宽度\n startResizeTableWidth(e: MouseEvent) {\n this.resizeTableWidth.resizing = true;\n this.resizeTableWidth.lastX = e.pageX;\n //this.resizeTableWidth.startWidth = this._gantt.tableNoFrameWidth;\n }\n isResizingTableWidth() {\n return this.resizeTableWidth.resizing;\n }\n endResizeTableWidth() {\n this.resizeTableWidth.resizing = false;\n }\n\n dealResizeTableWidth(e: MouseEvent) {\n if (!this.resizeTableWidth.resizing) {\n return;\n }\n const deltaX = e.pageX - this.resizeTableWidth.lastX;\n if (Math.abs(deltaX) >= 1) {\n const startWidth = this._gantt.taskTableWidth;\n let width = startWidth + deltaX;\n const maxWidth = Math.min(\n this._gantt.taskListTableInstance.getAllColsWidth() + this._gantt.parsedOptions.outerFrameStyle.borderLineWidth,\n this._gantt.options.taskListTable.maxTableWidth ?? 100000\n );\n const minWidth = Math.max(\n this._gantt.parsedOptions.outerFrameStyle.borderLineWidth,\n this._gantt.options.taskListTable.minTableWidth ?? 0\n );\n if (deltaX > 0 && width > maxWidth) {\n width = maxWidth;\n }\n if (deltaX < 0 && width < minWidth) {\n width = minWidth;\n }\n this._gantt.taskTableWidth = width;\n this._gantt.element.style.left = this._gantt.taskTableWidth ? `${this._gantt.taskTableWidth}px` : '0px';\n this._gantt.verticalSplitResizeLine.style.left = this._gantt.taskTableWidth\n ? `${this._gantt.taskTableWidth - 7}px`\n : '0px';\n this._gantt._resize();\n this.resizeTableWidth.lastX = e.pageX;\n }\n }\n //#endregion\n\n showTaskBarHover() {\n const target = this._gantt.stateManager.hoverTaskBar.target;\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, target);\n this._gantt.scenegraph.updateNextFrame();\n }\n hideTaskBarHover(e: FederatedPointerEvent) {\n this._gantt.stateManager.hoverTaskBar.target = null;\n this._gantt.scenegraph.taskBar.hideHoverBar();\n this._gantt.scenegraph.updateNextFrame();\n }\n\n showTaskBarSelectedBorder() {\n const linkCreatable = this._gantt.parsedOptions.dependencyLinkCreatable;\n const target = this._gantt.stateManager.selectedTaskBar.target;\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.createSelectedBorder(x, y, width, height, target, linkCreatable);\n this._gantt.scenegraph.updateNextFrame();\n }\n\n hideTaskBarSelectedBorder() {\n this._gantt.stateManager.selectedTaskBar.target = null;\n this._gantt.scenegraph.taskBar.removeSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n showSecondTaskBarSelectedBorder() {\n const target = this._gantt.stateManager.creatingDenpendencyLink.secondTaskBarNode;\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.createSelectedBorder(x, y, width, height, target, true);\n this._gantt.scenegraph.updateNextFrame();\n }\n hideSecondTaskBarSelectedBorder() {\n this._gantt.stateManager.creatingDenpendencyLink.secondTaskBarNode = null;\n this._gantt.scenegraph.taskBar.removeSecondSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n showDependencyLinkSelectedLine() {\n const link = this._gantt.stateManager.selectedDenpendencyLink.link;\n this._gantt.scenegraph.dependencyLink.createSelectedLinkLine(link);\n\n const { taskKeyField, dependencyLinks } = this._gantt.parsedOptions;\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n const linkedToTaskRecord = findRecordByTaskKey(this._gantt.records, taskKeyField, linkedToTaskKey);\n const linkedFromTaskRecord = findRecordByTaskKey(this._gantt.records, taskKeyField, linkedFromTaskKey);\n const linkedFromTaskShowIndex = this._gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n const linkedToTaskShowIndex = this._gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n const fromTaskNode = this._gantt.scenegraph.taskBar.getTaskBarNodeByIndex(\n linkedFromTaskShowIndex\n ) as GanttTaskBarNode;\n this._gantt.scenegraph.taskBar.createSelectedBorder(\n fromTaskNode.attribute.x,\n fromTaskNode.attribute.y,\n fromTaskNode.attribute.width,\n fromTaskNode.attribute.height,\n fromTaskNode,\n false\n );\n const toTaskNode = this._gantt.scenegraph.taskBar.getTaskBarNodeByIndex(linkedToTaskShowIndex) as GanttTaskBarNode;\n this._gantt.scenegraph.taskBar.createSelectedBorder(\n toTaskNode.attribute.x,\n toTaskNode.attribute.y,\n toTaskNode.attribute.width,\n toTaskNode.attribute.height,\n toTaskNode,\n false\n );\n\n this._gantt.scenegraph.updateNextFrame();\n }\n hideDependencyLinkSelectedLine() {\n this._gantt.stateManager.selectedDenpendencyLink.link = null;\n this._gantt.scenegraph.dependencyLink.removeSelectedLinkLine();\n this._gantt.scenegraph.taskBar.removeSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n highlightLinkPointNode(linkPointGroup: Group) {\n if (linkPointGroup?.children.length > 0) {\n const circle = linkPointGroup.children[0];\n circle.setAttribute('fill', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.fillColor);\n circle.setAttribute('stroke', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.strokeColor);\n circle.setAttribute('radius', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.radius);\n circle.setAttribute('lineWidth', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.strokeWidth);\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n unhighlightLinkPointNode(linkPointGroup: Group) {\n if (linkPointGroup?.children.length > 0) {\n const circle = linkPointGroup.children[0];\n circle.setAttribute('fill', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.fillColor);\n circle.setAttribute('stroke', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeColor);\n circle.setAttribute('radius', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.radius);\n circle.setAttribute('lineWidth', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeWidth);\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n}\n\nfunction reCreateCustomNode(gantt: Gantt, taskBarGroup: Group, taskIndex: number) {\n const taskBarCustomLayout = gantt.parsedOptions.taskBarCustomLayout;\n if (taskBarCustomLayout) {\n let customLayoutObj;\n if (typeof taskBarCustomLayout === 'function') {\n const { startDate, endDate, taskDays, progress, taskRecord } = gantt.getTaskInfoByTaskListIndex(taskIndex);\n const arg = {\n width: taskBarGroup.attribute.width,\n height: taskBarGroup.attribute.height,\n index: taskIndex,\n startDate,\n endDate,\n taskDays,\n progress,\n taskRecord,\n ganttInstance: gantt\n };\n customLayoutObj = taskBarCustomLayout(arg);\n } else {\n customLayoutObj = taskBarCustomLayout;\n }\n if (customLayoutObj) {\n const rootContainer = customLayoutObj.rootContainer;\n rootContainer.name = 'task-bar-custom-render';\n const oldCustomIndex = taskBarGroup.children.findIndex((node: any) => {\n return node.name === 'task-bar-custom-render';\n });\n const oldCustomNode = taskBarGroup.children[oldCustomIndex] as Group;\n taskBarGroup.removeChild(oldCustomNode);\n taskBarGroup.insertInto(rootContainer, oldCustomIndex);\n }\n }\n}\n\nfunction resizeOrMoveTaskBar(\n taskIndex: number,\n target: GanttTaskBarNode,\n dx: number,\n newWidth: number,\n state: StateManager\n) {\n // const taskIndex = getTaskIndexByY(state.moveTaskBar.startOffsetY, state._gantt);\n const record = state._gantt.getRecordByIndex(taskIndex);\n if (dx) {\n target.setAttribute('x', target.attribute.x + dx);\n }\n if (newWidth) {\n target.setAttribute('width', newWidth);\n }\n const vtable_gantt_linkedTo = record.vtable_gantt_linkedTo;\n const vtable_gantt_linkedFrom = record.vtable_gantt_linkedFrom;\n for (let i = 0; i < vtable_gantt_linkedTo?.length; i++) {\n const link = vtable_gantt_linkedTo[i];\n const linkLineNode = link.vtable_gantt_linkLineNode;\n const lineArrowNode = link.vtable_gantt_linkArrowNode;\n\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n const { taskKeyField, minDate } = state._gantt.parsedOptions;\n const linkedFromTaskRecord = findRecordByTaskKey(state._gantt.records, taskKeyField, linkedFromTaskKey);\n\n const { startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate } =\n state._gantt.getTaskInfoByTaskListIndex(taskIndex);\n const taskShowIndex = state._gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n const { startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate } =\n state._gantt.getTaskInfoByTaskListIndex(taskShowIndex);\n const { linePoints, arrowPoints } = updateLinkLinePoints(\n type,\n linkedFromTaskStartDate,\n linkedFromTaskEndDate,\n taskShowIndex,\n linkedToTaskStartDate,\n linkedToTaskEndDate,\n taskIndex,\n minDate,\n state._gantt.parsedOptions.rowHeight,\n state._gantt.parsedOptions.colWidthPerDay,\n null,\n target\n );\n linkLineNode.setAttribute('points', linePoints);\n lineArrowNode.setAttribute('points', arrowPoints);\n }\n\n for (let i = 0; i < vtable_gantt_linkedFrom?.length; i++) {\n const link = vtable_gantt_linkedFrom[i];\n const linkLineNode = link.vtable_gantt_linkLineNode;\n const lineArrowNode = link.vtable_gantt_linkArrowNode;\n\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n const { taskKeyField, minDate } = state._gantt.parsedOptions;\n const linkedToTaskRecord = findRecordByTaskKey(state._gantt.records, taskKeyField, linkedToTaskKey);\n\n const { startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate } =\n state._gantt.getTaskInfoByTaskListIndex(taskIndex);\n const taskShowIndex = state._gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n const { startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate } =\n state._gantt.getTaskInfoByTaskListIndex(taskShowIndex);\n const { linePoints, arrowPoints } = updateLinkLinePoints(\n type,\n linkedFromTaskStartDate,\n linkedFromTaskEndDate,\n taskIndex,\n linkedToTaskStartDate,\n linkedToTaskEndDate,\n taskShowIndex,\n minDate,\n state._gantt.parsedOptions.rowHeight,\n state._gantt.parsedOptions.colWidthPerDay,\n target,\n null\n );\n\n linkLineNode.setAttribute('points', linePoints);\n lineArrowNode.setAttribute('points', arrowPoints);\n }\n}\n"]}
@@ -197,8 +197,8 @@ export type ITaskCreationCustomLayoutObj = {
197
197
  export type ITaskCreationCustomLayout = (args: TaskCreationCustomLayoutArgumentType) => ITaskCreationCustomLayoutObj;
198
198
  export type ITaskLink = {
199
199
  type: DependencyType;
200
- linkedFromTaskKey?: string | number;
201
- linkedToTaskKey?: string | number;
200
+ linkedFromTaskKey?: string | number | (string | number)[];
201
+ linkedToTaskKey?: string | number | (string | number)[];
202
202
  };
203
203
  export type ITaskLinkSelectedStyle = ILineStyle & {
204
204
  shadowBlur?: number;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ts-types/gantt-engine.ts"],"names":[],"mappings":";;;AAmUA,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,mDAAiC,CAAA;IACjC,iDAA+B,CAAA;IAC/B,qDAAmC,CAAA;IACnC,mDAAiC,CAAA;AACnC,CAAC,EALW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAKzB","file":"gantt-engine.js","sourcesContent":["import type { ColumnsDefine, TYPES, ListTableConstructorOptions } from '@visactor/vtable';\nimport type { Group } from '@visactor/vtable/es/vrender';\nimport type { Gantt } from '../Gantt';\nexport type LayoutObjectId = number | string;\n\nexport interface ITimelineDateInfo {\n days: number;\n endDate: Date;\n startDate: Date;\n title: string;\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n}\n\nexport interface ITimelineHeaderStyle {\n padding?: number | number[];\n fontSize?: number;\n fontWeight?: string;\n color?: string;\n strokeColor?: string;\n // backgroundColor?: string;\n textAlign?: 'center' | 'end' | 'left' | 'right' | 'start'; // 设置单元格内文字的水平对齐方式\n textOverflow?: string;\n textBaseline?: 'alphabetic' | 'bottom' | 'middle' | 'top'; // 设置单元格内文字的垂直对齐方式\n textStick?: boolean;\n}\nexport interface IGrid {\n backgroundColor?: string;\n verticalLine?: ILineStyle;\n horizontalLine?: ILineStyle;\n}\n//#region gantt\nexport interface GanttConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n\n /** 左侧任务信息表格相关配置 */\n taskListTable?: {\n /** 左侧任务列表信息占用的宽度。如果设置为'auto'表示将所有列完全展示 */\n tableWidth?: 'auto' | number;\n /** 左侧任务列表 最小宽度 */\n minTableWidth?: number;\n /** 左侧任务列表 最大宽度 */\n maxTableWidth?: number;\n } & Omit<\n //ListTable表格可配置的属性\n ListTableConstructorOptions,\n | 'container'\n | 'records'\n | 'defaultHeaderRowHeight'\n | 'defaultRowHeight'\n | 'overscrollBehavior'\n | 'rowSeriesNumber'\n | 'scrollStyle'\n | 'pixelRatio'\n | 'title'\n >;\n /** 时间刻度 */\n timelineHeader: {\n backgroundColor?: string;\n colWidth?: number;\n /** 垂直间隔线样式 */\n verticalLine?: ILineStyle;\n /** 水平间隔线样式 */\n horizontalLine?: ILineStyle;\n scales: ITimelineScale[];\n };\n\n /** 任务条相关配置及样式 */\n taskBar?: {\n /** 任务开始日期对应的数据字段名 默认按'startDate' */\n startDateField?: string;\n /** 任务结束日期对应的数据字段名 默认按'endDate' */\n endDateField?: string;\n /** 任务进度对应的数据字段名 */\n progressField?: string;\n /** 任务条展示文字。可以配置固定文本 或者 字符串模版`${fieldName}` */\n labelText?: ITaskBarLabelText;\n /** 任务条文字样式 */\n labelTextStyle?: ITaskBarLabelTextStyle;\n /** 任务条样式 */\n barStyle?: ITaskBarStyle;\n /** 自定义布局渲染 */\n customLayout?: ITaskBarCustomLayout;\n /** 任务条是否可调整大小 */\n resizable?: boolean;\n /** 任务条是否可移动 */\n moveable?: boolean;\n /** 任务条hover时的样式 */\n hoverBarStyle?: ITaskBarHoverStyle;\n /** 任务条选择时的样式 TODO */\n selectedBarStyle?: ITaskBarSelectedStyle;\n /** 任务条是否可选择,默认为true */\n selectable?: boolean;\n /** 任务条右键菜单 */\n menu?: {\n /** 右键菜单。代替原来的option.contextmenu */\n contextMenuItems?:\n | TYPES.MenuListItem[]\n | ((\n record: string,\n index: number,\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number,\n startDate: Date,\n endDate: Date\n ) => TYPES.MenuListItem[]);\n };\n /** 数据没有排期时,可通过创建任务条排期。默认为true */\n scheduleCreatable?: boolean;\n /** 针对没有分配日期的任务,可以显示出创建按钮 */\n scheduleCreation?: {\n buttonStyle: ILineStyle & {\n cornerRadius?: number;\n backgroundColor?: string;\n };\n /** 任务条创建按钮的自定义渲染 */\n customLayout?: ITaskCreationCustomLayout;\n };\n };\n /** 数据条目可唯一标识的字段名,默认为'id' */\n taskKeyField?: string;\n /** 任务之间的依赖关系 */\n dependency?: {\n links: ITaskLink[];\n linkLineStyle?: ILineStyle;\n linkCreatable?: boolean;\n linkSelectable?: boolean;\n linkSelectedLineStyle?: ITaskLinkSelectedStyle;\n /** 创建关联线的操作点 */\n linkCreatePointStyle?: IPointStyle;\n /** 创建关联线的操作点响应状态效果 */\n linkCreatingPointStyle?: IPointStyle;\n /** 创建关联线的操作线样式 */\n linkCreatingLineStyle?: ILineStyle;\n };\n /** 网格线配置 */\n grid?: IGrid;\n\n /** 整个外边框及横纵分割线配置。 */\n frame?: {\n outerFrameStyle: IFrameStyle;\n verticalSplitLine?: ILineStyle;\n horizontalSplitLine?: ILineStyle;\n verticalSplitLineMoveable?: boolean;\n //列调整宽度的直线\n verticalSplitLineHighlight?: ILineStyle;\n };\n\n /** 标记线配置 如果配置为true 会自动给今天做标记 */\n markLine?: boolean | IMarkLine | IMarkLine[];\n\n /** 指定整个甘特图的最小日期 */\n minDate?: string;\n /** 指定整个甘特图的最大日期 不设置的话用默认规则*/\n maxDate?: string;\n\n /** 顶部表头部分默认行高。如果想按表头层级依次配置,请配置到timelineHeader.scale中 */\n headerRowHeight?: number;\n\n /** 数据默认行高 */\n rowHeight?: number;\n\n /** 行号配置 */\n rowSeriesNumber?: IRowSeriesNumber;\n\n /**\n * 'auto':和浏览器滚动行为一致 表格滚动到顶部/底部时 触发浏览器默认行为;\n * 设置为 'none' 时, 表格滚动到顶部/底部时, 不再触发父容器滚动\n * */\n overscrollBehavior?: 'auto' | 'none';\n\n scrollStyle?: IScrollStyle;\n\n pixelRatio?: number;\n dateFormat?:\n | 'yyyy-mm-dd'\n | 'dd-mm-yyyy'\n | 'mm/dd/yyyy'\n | 'yyyy/mm/dd'\n | 'dd/mm/yyyy'\n | 'yyyy.mm.dd'\n | 'dd.mm.yyyy'\n | 'mm.dd.yyyy';\n\n /** 表格绘制范围外的canvas上填充的颜色 */\n underlayBackgroundColor?: string;\n}\n/**\n * IBarLabelText\n * 可以配置固定文本 或者 ${fieldName} 或者自定义函数\n */\nexport type ITaskBarLabelText = string; //| string[] | ((args: any) => string | string[]);\nexport interface ITimelineScale {\n rowHeight?: number;\n unit: 'day' | 'week' | 'month' | 'quarter' | 'year';\n step: number;\n startOfWeek?: 'sunday' | 'monday';\n customLayout?: IDateCustomLayout;\n style?: ITimelineHeaderStyle;\n format?: (date: DateFormatArgumentType) => string;\n}\nexport interface ITaskBarLabelTextStyle {\n fontFamily?: string;\n fontSize?: number;\n color?: string;\n textAlign?: 'center' | 'end' | 'left' | 'right' | 'start'; // 设置单元格内文字的水平对齐方式\n textOverflow?: string;\n textBaseline?: 'alphabetic' | 'bottom' | 'middle' | 'top'; // 设置单元格内文字的垂直对齐方式\n padding?: number | number[];\n}\nexport interface ITaskBarStyle {\n /** 任务条的颜色 */\n barColor?: string;\n /** 已完成部分任务条的颜色 */\n completedBarColor?: string;\n /** 任务条的宽度 */\n width?: number;\n /** 任务条的圆角 */\n cornerRadius?: number;\n // /** 任务条的边框 */\n // borderWidth?: number;\n // /** 边框颜色 */\n // borderColor?: string;\n}\nexport type ILineStyle = {\n lineColor?: string;\n lineWidth?: number;\n lineDash?: number[];\n};\nexport type IPointStyle = {\n strokeColor?: string;\n strokeWidth?: number;\n fillColor?: string;\n radius?: number;\n};\nexport interface IMarkLine {\n date: string;\n style?: ILineStyle;\n /** 标记线显示在日期列下的位置 默认为'left' */\n position?: 'left' | 'right' | 'middle';\n /** 自动将日期范围内 包括改标记线 */\n scrollToMarkLine?: boolean;\n}\nexport type ITableColumnsDefine = ColumnsDefine;\nexport type IFrameStyle = {\n borderColor?: string;\n borderLineWidth?: number;\n borderLineDash?: number[];\n cornerRadius?: number;\n};\n\nexport type ITableStyle = TYPES.ThemeStyle;\nexport type IRowSeriesNumber = TYPES.IRowSeriesNumber;\nexport type IScrollStyle = TYPES.ScrollStyle;\nexport type DateFormatArgumentType = {\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n startDate: Date;\n endDate: Date;\n};\nexport type TaskBarCustomLayoutArgumentType = {\n width: number;\n height: number;\n index: number;\n startDate: Date;\n endDate: Date;\n taskDays: number;\n progress: number;\n taskRecord: any;\n ganttInstance: Gantt;\n};\nexport type ITaskBarCustomLayoutObj = {\n rootContainer: Group;\n renderDefaultBar?: boolean; // 默认false\n renderDefaultResizeIcon?: boolean; // 默认false\n renderDefaultText?: boolean; // 默认false\n};\nexport type ITaskBarCustomLayout = (args: TaskBarCustomLayoutArgumentType) => ITaskBarCustomLayoutObj; //CustomLayout\n\nexport type DateCustomLayoutArgumentType = {\n width: number;\n height: number;\n index: number;\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n title: string;\n startDate: Date;\n endDate: Date;\n days: number;\n ganttInstance: Gantt;\n};\nexport type IDateCustomLayoutObj = {\n rootContainer: Group;\n renderDefaultText?: boolean; // 默认false\n};\nexport type IDateCustomLayout = (args: DateCustomLayoutArgumentType) => IDateCustomLayoutObj;\n\nexport type TaskCreationCustomLayoutArgumentType = {\n width: number;\n height: number;\n // index: number;\n ganttInstance: Gantt;\n};\nexport type ITaskCreationCustomLayoutObj = {\n rootContainer: Group;\n};\nexport type ITaskCreationCustomLayout = (args: TaskCreationCustomLayoutArgumentType) => ITaskCreationCustomLayoutObj;\n\nexport type ITaskLink = {\n /** 依赖的类型 */\n type: DependencyType;\n linkedFromTaskKey?: string | number;\n linkedToTaskKey?: string | number;\n};\n\nexport type ITaskLinkSelectedStyle = ILineStyle & {\n shadowBlur?: number; //阴影宽度\n shadowOffset?: number; //偏移\n shadowColor?: string; //阴影颜色\n};\nexport enum DependencyType {\n FinishToStart = 'finish_to_start',\n StartToStart = 'start_to_start',\n FinishToFinish = 'finish_to_finish',\n StartToFinish = 'start_to_finish'\n}\nexport type ITaskBarSelectedStyle = {\n shadowBlur?: number; //阴影宽度\n shadowOffsetX?: number; //x方向偏移\n shadowOffsetY?: number; //Y方向偏移\n shadowColor?: string; //阴影颜色\n borderColor?: string; //边框颜色\n borderLineWidth?: number;\n};\nexport type ITaskBarHoverStyle = {\n /** 任务条的圆角 */\n cornerRadius?: number;\n barOverlayColor?: string;\n};\n//#endregion\n"]}
1
+ {"version":3,"sources":["../src/ts-types/gantt-engine.ts"],"names":[],"mappings":";;;AAqUA,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,mDAAiC,CAAA;IACjC,iDAA+B,CAAA;IAC/B,qDAAmC,CAAA;IACnC,mDAAiC,CAAA;AACnC,CAAC,EALW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAKzB","file":"gantt-engine.js","sourcesContent":["import type { ColumnsDefine, TYPES, ListTableConstructorOptions } from '@visactor/vtable';\nimport type { Group } from '@visactor/vtable/es/vrender';\nimport type { Gantt } from '../Gantt';\nexport type LayoutObjectId = number | string;\n\nexport interface ITimelineDateInfo {\n days: number;\n endDate: Date;\n startDate: Date;\n title: string;\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n}\n\nexport interface ITimelineHeaderStyle {\n padding?: number | number[];\n fontSize?: number;\n fontWeight?: string;\n color?: string;\n strokeColor?: string;\n // backgroundColor?: string;\n textAlign?: 'center' | 'end' | 'left' | 'right' | 'start'; // 设置单元格内文字的水平对齐方式\n textOverflow?: string;\n textBaseline?: 'alphabetic' | 'bottom' | 'middle' | 'top'; // 设置单元格内文字的垂直对齐方式\n textStick?: boolean;\n}\nexport interface IGrid {\n backgroundColor?: string;\n verticalLine?: ILineStyle;\n horizontalLine?: ILineStyle;\n}\n//#region gantt\nexport interface GanttConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n\n /** 左侧任务信息表格相关配置 */\n taskListTable?: {\n /** 左侧任务列表信息占用的宽度。如果设置为'auto'表示将所有列完全展示 */\n tableWidth?: 'auto' | number;\n /** 左侧任务列表 最小宽度 */\n minTableWidth?: number;\n /** 左侧任务列表 最大宽度 */\n maxTableWidth?: number;\n } & Omit<\n //ListTable表格可配置的属性\n ListTableConstructorOptions,\n | 'container'\n | 'records'\n | 'defaultHeaderRowHeight'\n | 'defaultRowHeight'\n | 'overscrollBehavior'\n | 'rowSeriesNumber'\n | 'scrollStyle'\n | 'pixelRatio'\n | 'title'\n >;\n /** 时间刻度 */\n timelineHeader: {\n backgroundColor?: string;\n colWidth?: number;\n /** 垂直间隔线样式 */\n verticalLine?: ILineStyle;\n /** 水平间隔线样式 */\n horizontalLine?: ILineStyle;\n scales: ITimelineScale[];\n };\n\n /** 任务条相关配置及样式 */\n taskBar?: {\n /** 任务开始日期对应的数据字段名 默认按'startDate' */\n startDateField?: string;\n /** 任务结束日期对应的数据字段名 默认按'endDate' */\n endDateField?: string;\n /** 任务进度对应的数据字段名 */\n progressField?: string;\n /** 任务条展示文字。可以配置固定文本 或者 字符串模版`${fieldName}` */\n labelText?: ITaskBarLabelText;\n /** 任务条文字样式 */\n labelTextStyle?: ITaskBarLabelTextStyle;\n /** 任务条样式 */\n barStyle?: ITaskBarStyle;\n /** 自定义布局渲染 */\n customLayout?: ITaskBarCustomLayout;\n /** 任务条是否可调整大小 */\n resizable?: boolean;\n /** 任务条是否可移动 */\n moveable?: boolean;\n /** 任务条hover时的样式 */\n hoverBarStyle?: ITaskBarHoverStyle;\n /** 任务条选择时的样式 TODO */\n selectedBarStyle?: ITaskBarSelectedStyle;\n /** 任务条是否可选择,默认为true */\n selectable?: boolean;\n /** 任务条右键菜单 */\n menu?: {\n /** 右键菜单。代替原来的option.contextmenu */\n contextMenuItems?:\n | TYPES.MenuListItem[]\n | ((\n record: string,\n index: number,\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number,\n startDate: Date,\n endDate: Date\n ) => TYPES.MenuListItem[]);\n };\n /** 数据没有排期时,可通过创建任务条排期。默认为true */\n scheduleCreatable?: boolean;\n /** 针对没有分配日期的任务,可以显示出创建按钮 */\n scheduleCreation?: {\n buttonStyle: ILineStyle & {\n cornerRadius?: number;\n backgroundColor?: string;\n };\n /** 任务条创建按钮的自定义渲染 */\n customLayout?: ITaskCreationCustomLayout;\n };\n };\n /** 数据条目可唯一标识的字段名,默认为'id' */\n taskKeyField?: string;\n /** 任务之间的依赖关系 */\n dependency?: {\n links: ITaskLink[];\n linkLineStyle?: ILineStyle;\n linkCreatable?: boolean;\n linkSelectable?: boolean;\n linkSelectedLineStyle?: ITaskLinkSelectedStyle;\n /** 创建关联线的操作点 */\n linkCreatePointStyle?: IPointStyle;\n /** 创建关联线的操作点响应状态效果 */\n linkCreatingPointStyle?: IPointStyle;\n /** 创建关联线的操作线样式 */\n linkCreatingLineStyle?: ILineStyle;\n };\n /** 网格线配置 */\n grid?: IGrid;\n\n /** 整个外边框及横纵分割线配置。 */\n frame?: {\n outerFrameStyle: IFrameStyle;\n verticalSplitLine?: ILineStyle;\n horizontalSplitLine?: ILineStyle;\n verticalSplitLineMoveable?: boolean;\n //列调整宽度的直线\n verticalSplitLineHighlight?: ILineStyle;\n };\n\n /** 标记线配置 如果配置为true 会自动给今天做标记 */\n markLine?: boolean | IMarkLine | IMarkLine[];\n\n /** 指定整个甘特图的最小日期 */\n minDate?: string;\n /** 指定整个甘特图的最大日期 不设置的话用默认规则*/\n maxDate?: string;\n\n /** 顶部表头部分默认行高。如果想按表头层级依次配置,请配置到timelineHeader.scale中 */\n headerRowHeight?: number;\n\n /** 数据默认行高 */\n rowHeight?: number;\n\n /** 行号配置 */\n rowSeriesNumber?: IRowSeriesNumber;\n\n /**\n * 'auto':和浏览器滚动行为一致 表格滚动到顶部/底部时 触发浏览器默认行为;\n * 设置为 'none' 时, 表格滚动到顶部/底部时, 不再触发父容器滚动\n * */\n overscrollBehavior?: 'auto' | 'none';\n\n scrollStyle?: IScrollStyle;\n\n pixelRatio?: number;\n dateFormat?:\n | 'yyyy-mm-dd'\n | 'dd-mm-yyyy'\n | 'mm/dd/yyyy'\n | 'yyyy/mm/dd'\n | 'dd/mm/yyyy'\n | 'yyyy.mm.dd'\n | 'dd.mm.yyyy'\n | 'mm.dd.yyyy';\n\n /** 表格绘制范围外的canvas上填充的颜色 */\n underlayBackgroundColor?: string;\n}\n/**\n * IBarLabelText\n * 可以配置固定文本 或者 ${fieldName} 或者自定义函数\n */\nexport type ITaskBarLabelText = string; //| string[] | ((args: any) => string | string[]);\nexport interface ITimelineScale {\n rowHeight?: number;\n unit: 'day' | 'week' | 'month' | 'quarter' | 'year';\n step: number;\n startOfWeek?: 'sunday' | 'monday';\n customLayout?: IDateCustomLayout;\n style?: ITimelineHeaderStyle;\n format?: (date: DateFormatArgumentType) => string;\n}\nexport interface ITaskBarLabelTextStyle {\n fontFamily?: string;\n fontSize?: number;\n color?: string;\n textAlign?: 'center' | 'end' | 'left' | 'right' | 'start'; // 设置单元格内文字的水平对齐方式\n textOverflow?: string;\n textBaseline?: 'alphabetic' | 'bottom' | 'middle' | 'top'; // 设置单元格内文字的垂直对齐方式\n padding?: number | number[];\n}\nexport interface ITaskBarStyle {\n /** 任务条的颜色 */\n barColor?: string;\n /** 已完成部分任务条的颜色 */\n completedBarColor?: string;\n /** 任务条的宽度 */\n width?: number;\n /** 任务条的圆角 */\n cornerRadius?: number;\n // /** 任务条的边框 */\n // borderWidth?: number;\n // /** 边框颜色 */\n // borderColor?: string;\n}\nexport type ILineStyle = {\n lineColor?: string;\n lineWidth?: number;\n lineDash?: number[];\n};\nexport type IPointStyle = {\n strokeColor?: string;\n strokeWidth?: number;\n fillColor?: string;\n radius?: number;\n};\nexport interface IMarkLine {\n date: string;\n style?: ILineStyle;\n /** 标记线显示在日期列下的位置 默认为'left' */\n position?: 'left' | 'right' | 'middle';\n /** 自动将日期范围内 包括改标记线 */\n scrollToMarkLine?: boolean;\n}\nexport type ITableColumnsDefine = ColumnsDefine;\nexport type IFrameStyle = {\n borderColor?: string;\n borderLineWidth?: number;\n borderLineDash?: number[];\n cornerRadius?: number;\n};\n\nexport type ITableStyle = TYPES.ThemeStyle;\nexport type IRowSeriesNumber = TYPES.IRowSeriesNumber;\nexport type IScrollStyle = TYPES.ScrollStyle;\nexport type DateFormatArgumentType = {\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n startDate: Date;\n endDate: Date;\n};\nexport type TaskBarCustomLayoutArgumentType = {\n width: number;\n height: number;\n index: number;\n startDate: Date;\n endDate: Date;\n taskDays: number;\n progress: number;\n taskRecord: any;\n ganttInstance: Gantt;\n};\nexport type ITaskBarCustomLayoutObj = {\n rootContainer: Group;\n renderDefaultBar?: boolean; // 默认false\n renderDefaultResizeIcon?: boolean; // 默认false\n renderDefaultText?: boolean; // 默认false\n};\nexport type ITaskBarCustomLayout = (args: TaskBarCustomLayoutArgumentType) => ITaskBarCustomLayoutObj; //CustomLayout\n\nexport type DateCustomLayoutArgumentType = {\n width: number;\n height: number;\n index: number;\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n title: string;\n startDate: Date;\n endDate: Date;\n days: number;\n ganttInstance: Gantt;\n};\nexport type IDateCustomLayoutObj = {\n rootContainer: Group;\n renderDefaultText?: boolean; // 默认false\n};\nexport type IDateCustomLayout = (args: DateCustomLayoutArgumentType) => IDateCustomLayoutObj;\n\nexport type TaskCreationCustomLayoutArgumentType = {\n width: number;\n height: number;\n // index: number;\n ganttInstance: Gantt;\n};\nexport type ITaskCreationCustomLayoutObj = {\n rootContainer: Group;\n};\nexport type ITaskCreationCustomLayout = (args: TaskCreationCustomLayoutArgumentType) => ITaskCreationCustomLayoutObj;\n\nexport type ITaskLink = {\n /** 依赖的类型 */\n type: DependencyType;\n /** 依赖线的起始任务唯一标识。如果是tree树形结构的数据 设置数组的话 查找性能会更高 */\n linkedFromTaskKey?: string | number | (string | number)[];\n /** 依赖的终止目标任务唯一标识。如果是tree树形结构的数据 设置数组的话 查找性能会更高 */\n linkedToTaskKey?: string | number | (string | number)[];\n};\n\nexport type ITaskLinkSelectedStyle = ILineStyle & {\n shadowBlur?: number; //阴影宽度\n shadowOffset?: number; //偏移\n shadowColor?: string; //阴影颜色\n};\nexport enum DependencyType {\n FinishToStart = 'finish_to_start',\n StartToStart = 'start_to_start',\n FinishToFinish = 'finish_to_finish',\n StartToFinish = 'start_to_finish'\n}\nexport type ITaskBarSelectedStyle = {\n shadowBlur?: number; //阴影宽度\n shadowOffsetX?: number; //x方向偏移\n shadowOffsetY?: number; //Y方向偏移\n shadowColor?: string; //阴影颜色\n borderColor?: string; //边框颜色\n borderLineWidth?: number;\n};\nexport type ITaskBarHoverStyle = {\n /** 任务条的圆角 */\n cornerRadius?: number;\n barOverlayColor?: string;\n};\n//#endregion\n"]}