@visactor/vtable-gantt 1.23.3 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/cjs/Gantt.d.ts +8 -0
  2. package/cjs/Gantt.js +91 -9
  3. package/cjs/Gantt.js.map +1 -1
  4. package/cjs/gantt-helper.js +1 -2
  5. package/cjs/gantt-helper.js.map +1 -1
  6. package/cjs/index.d.ts +1 -1
  7. package/cjs/index.js +1 -1
  8. package/cjs/index.js.map +1 -1
  9. package/cjs/plugins/index.js.map +1 -1
  10. package/cjs/scenegraph/dependency-link.js +28 -38
  11. package/cjs/scenegraph/dependency-link.js.map +1 -1
  12. package/cjs/scenegraph/grid.js +8 -7
  13. package/cjs/scenegraph/grid.js.map +1 -1
  14. package/cjs/scenegraph/mark-line.js +10 -12
  15. package/cjs/scenegraph/mark-line.js.map +1 -1
  16. package/cjs/scenegraph/task-bar.js +3 -7
  17. package/cjs/scenegraph/task-bar.js.map +1 -1
  18. package/cjs/scenegraph/timeline-header.js +1 -4
  19. package/cjs/scenegraph/timeline-header.js.map +1 -1
  20. package/cjs/state/state-manager.js +22 -18
  21. package/cjs/state/state-manager.js.map +1 -1
  22. package/cjs/tools/isx.d.ts +1 -1
  23. package/cjs/ts-types/gantt-engine.d.ts +2 -0
  24. package/cjs/ts-types/gantt-engine.js.map +1 -1
  25. package/dist/vtable-gantt.js +1256 -801
  26. package/dist/vtable-gantt.min.js +2 -2
  27. package/es/Gantt.d.ts +8 -0
  28. package/es/Gantt.js +92 -8
  29. package/es/Gantt.js.map +1 -1
  30. package/es/gantt-helper.js +1 -2
  31. package/es/gantt-helper.js.map +1 -1
  32. package/es/index.d.ts +1 -1
  33. package/es/index.js +1 -1
  34. package/es/index.js.map +1 -1
  35. package/es/plugins/index.js.map +1 -1
  36. package/es/scenegraph/dependency-link.js +29 -27
  37. package/es/scenegraph/dependency-link.js.map +1 -1
  38. package/es/scenegraph/grid.js +6 -8
  39. package/es/scenegraph/grid.js.map +1 -1
  40. package/es/scenegraph/mark-line.js +10 -11
  41. package/es/scenegraph/mark-line.js.map +1 -1
  42. package/es/scenegraph/task-bar.js +4 -5
  43. package/es/scenegraph/task-bar.js.map +1 -1
  44. package/es/scenegraph/timeline-header.js +2 -3
  45. package/es/scenegraph/timeline-header.js.map +1 -1
  46. package/es/state/state-manager.js +22 -18
  47. package/es/state/state-manager.js.map +1 -1
  48. package/es/tools/isx.d.ts +1 -1
  49. package/es/ts-types/gantt-engine.d.ts +2 -0
  50. package/es/ts-types/gantt-engine.js.map +1 -1
  51. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ts-types/gantt-engine.ts"],"names":[],"mappings":";;;AA+cA,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;AACD,IAAY,aAaX;AAbD,WAAY,aAAa;IAEvB,kDAAiC,CAAA;IAEjC,sDAAqC,CAAA;IAErC,0DAAyC,CAAA;IAEzC,wDAAuC,CAAA;IAEvC,wDAAuC,CAAA;IAEvC,sEAAqD,CAAA;AACvD,CAAC,EAbW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAaxB;AAID,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,+BAAmB,CAAA;IACnB,mCAAuB,CAAA;AACzB,CAAC,EAJW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAInB","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;\nimport type { IGanttPlugin } from '../plugins/interface';\nimport type { IZoomScale } from './zoom-scale';\nexport interface ITimelineDateInfo {\n days: number;\n endDate: Date;\n startDate: Date;\n title: string;\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n unit: 'year' | 'month' | 'quarter' | 'week' | 'day' | 'hour' | 'minute' | 'second';\n step: 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 /** 需要按数据行设置不同背景色 */\n horizontalBackgroundColor?: string[] | ((args: GridHorizontalLineStyleArgumentType) => string);\n /** 需要按日期列设置不同背景色 */\n verticalBackgroundColor?: string[] | ((args: GridVerticalLineStyleArgumentType) => string);\n /** 周末背景色 */\n weekendBackgroundColor?: string;\n\n verticalLine?: ILineStyle | ((args: GridVerticalLineStyleArgumentType) => ILineStyle);\n horizontalLine?: ILineStyle | ((args: GridHorizontalLineStyleArgumentType) => ILineStyle);\n /** 竖线依赖的日期刻度。默认为timelineHeader中scales中的最小时间粒度 */\n verticalLineDependenceOnTimeScale?: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second';\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 /**\n * ZoomScale 多级别缩放配置(优先级高于 timelineHeader.scales)\n * 当启用时,会根据缩放级别自动切换不同的 scales 组合\n */\n zoomScale?: IZoomScale;\n scales: ITimelineScale[];\n };\n\n /** 任务条相关配置及样式 */\n taskBar?: {\n /** 任务开始日期对应的数据字段名 默认按'startDate' */\n startDateField?: string;\n /** 任务结束日期对应的数据字段名 默认按'endDate' */\n endDateField?: string;\n /** 任务进度对应的数据字段名 */\n progressField?: string;\n /** 基线开始日期对应的数据字段名 默认按'baselineStartDate' */\n baselineStartDateField?: string;\n /** 基线结束日期对应的数据字段名 默认按'baselineEndDate' */\n baselineEndDateField?: string;\n /** 基线样式 */\n baselineStyle?: ITaskBarStyle | ((args: TaskBarInteractionArgumentType) => ITaskBarStyle);\n /** 基线相对于任务条的位置:'top'|'bottom'|'overlap',默认'bottom' */\n baselinePosition?: 'top' | 'bottom' | 'overlap';\n /** 任务条展示文字。可以配置固定文本 或者 字符串模版`${fieldName}` */\n labelText?: ITaskBarLabelText;\n /** 任务条文字样式 */\n labelTextStyle?: ITaskBarLabelTextStyle;\n /** 任务条样式 */\n barStyle?: ITaskBarStyle | ((args: TaskBarInteractionArgumentType) => ITaskBarStyle);\n milestoneStyle?: IMilestoneStyle;\n projectStyle?: ITaskBarStyle | ((args: TaskBarInteractionArgumentType) => ITaskBarStyle);\n /** 自定义布局渲染 */\n customLayout?: ITaskBarCustomLayout;\n /** 任务条是否可调整大小 */\n resizable?:\n | boolean\n | [boolean, boolean]\n | ((interactionArgs: TaskBarInteractionArgumentType) => boolean | [boolean, boolean]);\n /** 任务条是否可移动 */\n moveable?: boolean | ((interactionArgs: TaskBarInteractionArgumentType) => boolean);\n /** 任务进度是否可调整 */\n progressAdjustable?: boolean | ((interactionArgs: TaskBarInteractionArgumentType) => boolean);\n /** 任务条拖拽超出当前日期范围时自动扩展日期范围 */\n moveToExtendDateRange?: boolean;\n /** 任务条是否可以被拖拽来改变顺序 */\n dragOrder?: boolean;\n /** 任务条hover时的样式 */\n hoverBarStyle?: ITaskBarHoverStyle;\n /** 任务条选择时的样式 TODO */\n selectedBarStyle?: ITaskBarSelectedStyle;\n /** 任务条是否可选择,默认为true */\n selectable?: boolean;\n /** 任务条是否裁剪溢出部分 */\n clip?: 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 | ((interactionArgs: TaskBarInteractionArgumentType) => boolean);\n /** 针对没有分配日期的任务,可以显示出创建按钮 */\n scheduleCreation?: {\n buttonStyle?: ILineStyle & {\n cornerRadius?: number;\n backgroundColor?: string;\n };\n /** 任务条创建按钮的自定义渲染 */\n customLayout?: ITaskCreationCustomLayout;\n /** 任务条创建按钮的最大宽度 */\n maxWidth?: number;\n /** 任务条创建按钮的最小宽度 */\n minWidth?: number;\n };\n };\n /** 数据条目可唯一标识的字段名,默认为'id' */\n taskKeyField?: string;\n /** 任务之间的依赖关系 */\n dependency?: {\n links: ITaskLink[];\n linkLineStyle?: ILineStyle;\n linkCreatable?: boolean;\n linkSelectable?: boolean;\n linkDeletable?: boolean;\n linkSelectedLineStyle?: ITaskLinkSelectedStyle;\n /** 创建关联线的操作点 */\n linkCreatePointStyle?: IPointStyle;\n /** 创建关联线的操作点响应状态效果 */\n linkCreatingPointStyle?: IPointStyle;\n /** 创建关联线的操作线样式 */\n linkCreatingLineStyle?: ILineStyle;\n /** 依赖关系线拐点与任务条的距离 默认20 */\n distanceToTaskBar?: number;\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 groupBy?: true | string | string[];\n /** 展示嵌套结构数据时的模式,默认为full。*/\n tasksShowMode?: TasksShowMode;\n /**\n * 当使用Project_Sub_Tasks_Inline模式时,控制是否启用项目子任务的展开/收起功能\n * 默认值为true\n * 当设置为true(默认值)时,项目节点可以展开/收起其子任务\n * 当设置为false时,项目节点将始终以内联方式显示其子任务,没有展开/收起功能\n */\n projectSubTasksExpandable?: boolean;\n eventOptions?: IEventOptions;\n keyboardOptions?: IKeyboardOptions;\n markLineCreateOptions?: IMarkLineCreateOptions;\n plugins?: IGanttPlugin[];\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' | 'hour' | 'minute' | 'second';\n step: number;\n startOfWeek?: 'sunday' | 'monday';\n customLayout?: IDateCustomLayout;\n style?: ITimelineHeaderStyle;\n format?: (date: DateFormatArgumentType) => string;\n visible?: boolean;\n}\nexport interface ITaskBarLabelTextStyle {\n fontFamily?: string;\n fontSize?: number;\n color?: string;\n /** 当文字显示在任务条外侧时的颜色,默认为黑色 */\n outsideColor?: string;\n textAlign?: 'center' | 'end' | 'left' | 'right' | 'start'; // 设置单元格内文字的水平对齐方式\n textOverflow?: string;\n textBaseline?: 'alphabetic' | 'bottom' | 'middle' | 'top'; // 设置单元格内文字的垂直对齐方式\n padding?: number | number[];\n /** 相对于任务条文字方位位置,可选值:'left', 'top', 'right', 'bottom',分别代表左、上、右、下四个方向 */\n orient?: 'left' | 'top' | 'right' | 'bottom';\n /** 只有当文本在 taskbar 中容纳不下时,会根据该方位将文本显示在任务条旁边。当配置 orient 时,该配置无效 */\n orientHandleWithOverflow?: 'left' | 'top' | 'right' | 'bottom';\n}\nexport interface ITaskBarStyle {\n /** 任务条的颜色 */\n barColor?: string;\n /** 已完成部分任务条的颜色 */\n completedBarColor?: string;\n /** 任务条的宽度 */\n width?: number;\n /** 任务条的圆角 */\n cornerRadius?: number;\n /**@deprecated 请配置borderLineWidth */\n borderWidth?: number;\n\n /** 任务条的边框宽度 */\n borderLineWidth?: number;\n /** 边框颜色 */\n borderColor?: string;\n\n /** 任务条的最小尺寸 */\n minSize?: number;\n /** 任务条距离行顶部的距离 */\n paddingTop?: number;\n}\nexport interface IMilestoneStyle {\n /** 里程碑边框颜色 */\n borderColor?: string;\n /** 里程碑边框宽度 */\n borderLineWidth?: number;\n /** 里程碑填充颜色 */\n fillColor?: string;\n /** 里程碑正方形圆角 */\n cornerRadius?: number;\n /** 里程碑默认是个正方形,这个width配置正方形的边长 */\n width?: number;\n /** 里程碑展示文字。可以配置固定文本 或者 字符串模版`${fieldName}` */\n labelText?: ITaskBarLabelText;\n /** 里程碑文字样式 */\n labelTextStyle?: ITaskBarLabelTextStyle;\n // /** 里程碑图标 */\n // icon?: string;\n /** 文字相对于里程碑的位置 */\n textOrient?: 'left' | 'top' | 'right' | 'bottom';\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 content?: string;\n contentStyle?: {\n color?: string;\n fontSize?: number;\n fontWeight?: string;\n lineHeight?: number;\n backgroundColor?: string;\n cornerRadius?: number | number[];\n };\n style?: ILineStyle;\n /** 标记线显示在日期列下的位置 默认为'left' */\n position?: 'left' | 'right' | 'middle' | 'date';\n /** 自动将日期范围内 包括改标记线 */\n scrollToMarkLine?: boolean;\n}\nexport type ITableColumnsDefine = ColumnsDefine;\nexport type IFrameStyle = {\n borderColor?: string;\n borderLineWidth?: number | 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 IEventOptions = TYPES.TableEventOptions;\n\nexport interface IKeyboardOptions {\n /** 当按下del按键是否删除连线 默认为false */\n deleteLinkOnDel?: boolean;\n /** 当按下back按键是否删除连线 默认为false */\n deleteLinkOnBack?: boolean;\n}\nexport type DateFormatArgumentType = {\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n startDate: Date;\n endDate: Date;\n};\nexport type TaskBarInteractionArgumentType = {\n taskRecord: any;\n index: number;\n subIndex?: number;\n startDate: Date;\n endDate: Date;\n ganttInstance: Gantt;\n};\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 GridVerticalLineStyleArgumentType = {\n /** 竖线是第几条线*/\n index: number;\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n /** 如果是竖线,date代表分割线指向的具体时间点 */\n date?: Date;\n ganttInstance: Gantt;\n};\n\nexport type GridHorizontalLineStyleArgumentType = {\n /** 横线是第几条线 也代表了左侧表格的body行号 */\n index: number;\n ganttInstance: Gantt;\n};\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 linkLineStyle?: ILineStyle;\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 enum TasksShowMode {\n /** 每一个任务节点用单独一行来展示,父任务占用一行,子任务分别占用一行。这是默认的显示效果 */\n Tasks_Separate = 'tasks_separate',\n /** 省去父任务节点不展示,并把所有子任务的节点都放到同一行来展示。 */\n Sub_Tasks_Inline = 'sub_tasks_inline',\n /** 省去父任务节点不展示,且所有子任务的节点分别用一行展示。*/\n Sub_Tasks_Separate = 'sub_tasks_separate',\n /** 省去父任务节点不展示,且所有子任务会维持records中的数据顺序布局,并保证节点不重叠展示 */\n Sub_Tasks_Arrange = 'sub_tasks_arrange',\n /** 省去父任务节点不展示,且所有子任务会按照日期早晚的属性来布局,并保证节点不重叠的紧凑型展示 */\n Sub_Tasks_Compact = 'sub_tasks_compact',\n /** 数据标记为project的节点,会把所有子任务的节点都放到和主任务的同一行来展示。其他节点则保持默认的显示效果即Tasks_Separate */\n Project_Sub_Tasks_Inline = 'project_sub_tasks_inline'\n}\n/**\n * 任务类型枚举,用于区分不同类型的任务\n */\nexport enum TaskType {\n TASK = 'task', // record没有指明type的 会默认使用TASK\n PROJECT = 'project',\n MILESTONE = 'milestone'\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\nexport type IMarkLineCreateOptions = {\n markLineCreatable: boolean;\n markLineCreationHoverToolTip?: {\n position?: 'top' | 'bottom';\n tipContent?: string;\n style?: {\n contentStyle?: any;\n panelStyle?: any;\n };\n };\n markLineCreationStyle?: {\n fill?: string;\n size?: number;\n iconSize?: number;\n svg?: string;\n };\n};\n"]}
1
+ {"version":3,"sources":["../src/ts-types/gantt-engine.ts"],"names":[],"mappings":";;;AAidA,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;AACD,IAAY,aAaX;AAbD,WAAY,aAAa;IAEvB,kDAAiC,CAAA;IAEjC,sDAAqC,CAAA;IAErC,0DAAyC,CAAA;IAEzC,wDAAuC,CAAA;IAEvC,wDAAuC,CAAA;IAEvC,sEAAqD,CAAA;AACvD,CAAC,EAbW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAaxB;AAID,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,+BAAmB,CAAA;IACnB,mCAAuB,CAAA;AACzB,CAAC,EAJW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAInB","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;\nimport type { IGanttPlugin } from '../plugins/interface';\nimport type { IZoomScale } from './zoom-scale';\nexport interface ITimelineDateInfo {\n days: number;\n endDate: Date;\n startDate: Date;\n title: string;\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n unit: 'year' | 'month' | 'quarter' | 'week' | 'day' | 'hour' | 'minute' | 'second';\n step: 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 /** 需要按数据行设置不同背景色 */\n horizontalBackgroundColor?: string[] | ((args: GridHorizontalLineStyleArgumentType) => string);\n /** 需要按日期列设置不同背景色 */\n verticalBackgroundColor?: string[] | ((args: GridVerticalLineStyleArgumentType) => string);\n /** 周末背景色 */\n weekendBackgroundColor?: string;\n\n verticalLine?: ILineStyle | ((args: GridVerticalLineStyleArgumentType) => ILineStyle);\n horizontalLine?: ILineStyle | ((args: GridHorizontalLineStyleArgumentType) => ILineStyle);\n /** 竖线依赖的日期刻度。默认为timelineHeader中scales中的最小时间粒度 */\n verticalLineDependenceOnTimeScale?: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second';\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 hideWeekend?: boolean;\n weekendColWidth?: number | ((colWidth: number) => number);\n /** 垂直间隔线样式 */\n verticalLine?: ILineStyle;\n /** 水平间隔线样式 */\n horizontalLine?: ILineStyle;\n /**\n * ZoomScale 多级别缩放配置(优先级高于 timelineHeader.scales)\n * 当启用时,会根据缩放级别自动切换不同的 scales 组合\n */\n zoomScale?: IZoomScale;\n scales: ITimelineScale[];\n };\n\n /** 任务条相关配置及样式 */\n taskBar?: {\n /** 任务开始日期对应的数据字段名 默认按'startDate' */\n startDateField?: string;\n /** 任务结束日期对应的数据字段名 默认按'endDate' */\n endDateField?: string;\n /** 任务进度对应的数据字段名 */\n progressField?: string;\n /** 基线开始日期对应的数据字段名 默认按'baselineStartDate' */\n baselineStartDateField?: string;\n /** 基线结束日期对应的数据字段名 默认按'baselineEndDate' */\n baselineEndDateField?: string;\n /** 基线样式 */\n baselineStyle?: ITaskBarStyle | ((args: TaskBarInteractionArgumentType) => ITaskBarStyle);\n /** 基线相对于任务条的位置:'top'|'bottom'|'overlap',默认'bottom' */\n baselinePosition?: 'top' | 'bottom' | 'overlap';\n /** 任务条展示文字。可以配置固定文本 或者 字符串模版`${fieldName}` */\n labelText?: ITaskBarLabelText;\n /** 任务条文字样式 */\n labelTextStyle?: ITaskBarLabelTextStyle;\n /** 任务条样式 */\n barStyle?: ITaskBarStyle | ((args: TaskBarInteractionArgumentType) => ITaskBarStyle);\n milestoneStyle?: IMilestoneStyle;\n projectStyle?: ITaskBarStyle | ((args: TaskBarInteractionArgumentType) => ITaskBarStyle);\n /** 自定义布局渲染 */\n customLayout?: ITaskBarCustomLayout;\n /** 任务条是否可调整大小 */\n resizable?:\n | boolean\n | [boolean, boolean]\n | ((interactionArgs: TaskBarInteractionArgumentType) => boolean | [boolean, boolean]);\n /** 任务条是否可移动 */\n moveable?: boolean | ((interactionArgs: TaskBarInteractionArgumentType) => boolean);\n /** 任务进度是否可调整 */\n progressAdjustable?: boolean | ((interactionArgs: TaskBarInteractionArgumentType) => boolean);\n /** 任务条拖拽超出当前日期范围时自动扩展日期范围 */\n moveToExtendDateRange?: boolean;\n /** 任务条是否可以被拖拽来改变顺序 */\n dragOrder?: boolean;\n /** 任务条hover时的样式 */\n hoverBarStyle?: ITaskBarHoverStyle;\n /** 任务条选择时的样式 TODO */\n selectedBarStyle?: ITaskBarSelectedStyle;\n /** 任务条是否可选择,默认为true */\n selectable?: boolean;\n /** 任务条是否裁剪溢出部分 */\n clip?: 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 | ((interactionArgs: TaskBarInteractionArgumentType) => boolean);\n /** 针对没有分配日期的任务,可以显示出创建按钮 */\n scheduleCreation?: {\n buttonStyle?: ILineStyle & {\n cornerRadius?: number;\n backgroundColor?: string;\n };\n /** 任务条创建按钮的自定义渲染 */\n customLayout?: ITaskCreationCustomLayout;\n /** 任务条创建按钮的最大宽度 */\n maxWidth?: number;\n /** 任务条创建按钮的最小宽度 */\n minWidth?: number;\n };\n };\n /** 数据条目可唯一标识的字段名,默认为'id' */\n taskKeyField?: string;\n /** 任务之间的依赖关系 */\n dependency?: {\n links: ITaskLink[];\n linkLineStyle?: ILineStyle;\n linkCreatable?: boolean;\n linkSelectable?: boolean;\n linkDeletable?: boolean;\n linkSelectedLineStyle?: ITaskLinkSelectedStyle;\n /** 创建关联线的操作点 */\n linkCreatePointStyle?: IPointStyle;\n /** 创建关联线的操作点响应状态效果 */\n linkCreatingPointStyle?: IPointStyle;\n /** 创建关联线的操作线样式 */\n linkCreatingLineStyle?: ILineStyle;\n /** 依赖关系线拐点与任务条的距离 默认20 */\n distanceToTaskBar?: number;\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 groupBy?: true | string | string[];\n /** 展示嵌套结构数据时的模式,默认为full。*/\n tasksShowMode?: TasksShowMode;\n /**\n * 当使用Project_Sub_Tasks_Inline模式时,控制是否启用项目子任务的展开/收起功能\n * 默认值为true\n * 当设置为true(默认值)时,项目节点可以展开/收起其子任务\n * 当设置为false时,项目节点将始终以内联方式显示其子任务,没有展开/收起功能\n */\n projectSubTasksExpandable?: boolean;\n eventOptions?: IEventOptions;\n keyboardOptions?: IKeyboardOptions;\n markLineCreateOptions?: IMarkLineCreateOptions;\n plugins?: IGanttPlugin[];\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' | 'hour' | 'minute' | 'second';\n step: number;\n startOfWeek?: 'sunday' | 'monday';\n customLayout?: IDateCustomLayout;\n style?: ITimelineHeaderStyle;\n format?: (date: DateFormatArgumentType) => string;\n visible?: boolean;\n}\nexport interface ITaskBarLabelTextStyle {\n fontFamily?: string;\n fontSize?: number;\n color?: string;\n /** 当文字显示在任务条外侧时的颜色,默认为黑色 */\n outsideColor?: string;\n textAlign?: 'center' | 'end' | 'left' | 'right' | 'start'; // 设置单元格内文字的水平对齐方式\n textOverflow?: string;\n textBaseline?: 'alphabetic' | 'bottom' | 'middle' | 'top'; // 设置单元格内文字的垂直对齐方式\n padding?: number | number[];\n /** 相对于任务条文字方位位置,可选值:'left', 'top', 'right', 'bottom',分别代表左、上、右、下四个方向 */\n orient?: 'left' | 'top' | 'right' | 'bottom';\n /** 只有当文本在 taskbar 中容纳不下时,会根据该方位将文本显示在任务条旁边。当配置 orient 时,该配置无效 */\n orientHandleWithOverflow?: 'left' | 'top' | 'right' | 'bottom';\n}\nexport interface ITaskBarStyle {\n /** 任务条的颜色 */\n barColor?: string;\n /** 已完成部分任务条的颜色 */\n completedBarColor?: string;\n /** 任务条的宽度 */\n width?: number;\n /** 任务条的圆角 */\n cornerRadius?: number;\n /**@deprecated 请配置borderLineWidth */\n borderWidth?: number;\n\n /** 任务条的边框宽度 */\n borderLineWidth?: number;\n /** 边框颜色 */\n borderColor?: string;\n\n /** 任务条的最小尺寸 */\n minSize?: number;\n /** 任务条距离行顶部的距离 */\n paddingTop?: number;\n}\nexport interface IMilestoneStyle {\n /** 里程碑边框颜色 */\n borderColor?: string;\n /** 里程碑边框宽度 */\n borderLineWidth?: number;\n /** 里程碑填充颜色 */\n fillColor?: string;\n /** 里程碑正方形圆角 */\n cornerRadius?: number;\n /** 里程碑默认是个正方形,这个width配置正方形的边长 */\n width?: number;\n /** 里程碑展示文字。可以配置固定文本 或者 字符串模版`${fieldName}` */\n labelText?: ITaskBarLabelText;\n /** 里程碑文字样式 */\n labelTextStyle?: ITaskBarLabelTextStyle;\n // /** 里程碑图标 */\n // icon?: string;\n /** 文字相对于里程碑的位置 */\n textOrient?: 'left' | 'top' | 'right' | 'bottom';\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 content?: string;\n contentStyle?: {\n color?: string;\n fontSize?: number;\n fontWeight?: string;\n lineHeight?: number;\n backgroundColor?: string;\n cornerRadius?: number | number[];\n };\n style?: ILineStyle;\n /** 标记线显示在日期列下的位置 默认为'left' */\n position?: 'left' | 'right' | 'middle' | 'date';\n /** 自动将日期范围内 包括改标记线 */\n scrollToMarkLine?: boolean;\n}\nexport type ITableColumnsDefine = ColumnsDefine;\nexport type IFrameStyle = {\n borderColor?: string;\n borderLineWidth?: number | 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 IEventOptions = TYPES.TableEventOptions;\n\nexport interface IKeyboardOptions {\n /** 当按下del按键是否删除连线 默认为false */\n deleteLinkOnDel?: boolean;\n /** 当按下back按键是否删除连线 默认为false */\n deleteLinkOnBack?: boolean;\n}\nexport type DateFormatArgumentType = {\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n startDate: Date;\n endDate: Date;\n};\nexport type TaskBarInteractionArgumentType = {\n taskRecord: any;\n index: number;\n subIndex?: number;\n startDate: Date;\n endDate: Date;\n ganttInstance: Gantt;\n};\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 GridVerticalLineStyleArgumentType = {\n /** 竖线是第几条线*/\n index: number;\n /** 当期日期属于该日期刻度的第几位。如季度日期中第四季度 返回4。 */\n dateIndex: number;\n /** 如果是竖线,date代表分割线指向的具体时间点 */\n date?: Date;\n ganttInstance: Gantt;\n};\n\nexport type GridHorizontalLineStyleArgumentType = {\n /** 横线是第几条线 也代表了左侧表格的body行号 */\n index: number;\n ganttInstance: Gantt;\n};\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 linkLineStyle?: ILineStyle;\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 enum TasksShowMode {\n /** 每一个任务节点用单独一行来展示,父任务占用一行,子任务分别占用一行。这是默认的显示效果 */\n Tasks_Separate = 'tasks_separate',\n /** 省去父任务节点不展示,并把所有子任务的节点都放到同一行来展示。 */\n Sub_Tasks_Inline = 'sub_tasks_inline',\n /** 省去父任务节点不展示,且所有子任务的节点分别用一行展示。*/\n Sub_Tasks_Separate = 'sub_tasks_separate',\n /** 省去父任务节点不展示,且所有子任务会维持records中的数据顺序布局,并保证节点不重叠展示 */\n Sub_Tasks_Arrange = 'sub_tasks_arrange',\n /** 省去父任务节点不展示,且所有子任务会按照日期早晚的属性来布局,并保证节点不重叠的紧凑型展示 */\n Sub_Tasks_Compact = 'sub_tasks_compact',\n /** 数据标记为project的节点,会把所有子任务的节点都放到和主任务的同一行来展示。其他节点则保持默认的显示效果即Tasks_Separate */\n Project_Sub_Tasks_Inline = 'project_sub_tasks_inline'\n}\n/**\n * 任务类型枚举,用于区分不同类型的任务\n */\nexport enum TaskType {\n TASK = 'task', // record没有指明type的 会默认使用TASK\n PROJECT = 'project',\n MILESTONE = 'milestone'\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\nexport type IMarkLineCreateOptions = {\n markLineCreatable: boolean;\n markLineCreationHoverToolTip?: {\n position?: 'top' | 'bottom';\n tipContent?: string;\n style?: {\n contentStyle?: any;\n panelStyle?: any;\n };\n };\n markLineCreationStyle?: {\n fill?: string;\n size?: number;\n iconSize?: number;\n svg?: string;\n };\n};\n"]}