@xpyjs/gantt-core 0.0.1-alpha.0 → 0.0.1-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/package.json +15 -16
  2. package/dist/style.css +0 -1
  3. package/dist/x-gantt.js +0 -5793
  4. package/dist/x-gantt.umd.cjs +0 -18
  5. package/types/GanttContext.d.ts +0 -33
  6. package/types/XGantt.d.ts +0 -243
  7. package/types/event/index.d.ts +0 -65
  8. package/types/index.d.ts +0 -12
  9. package/types/logo.d.ts +0 -2
  10. package/types/models/Task.d.ts +0 -67
  11. package/types/rendering/RenderScheduler.d.ts +0 -93
  12. package/types/rendering/Renderer.d.ts +0 -51
  13. package/types/rendering/chart/ChartBody.d.ts +0 -102
  14. package/types/rendering/chart/ChartGrid.d.ts +0 -37
  15. package/types/rendering/chart/ChartHeader.d.ts +0 -54
  16. package/types/rendering/chart/ChartHoliday.d.ts +0 -38
  17. package/types/rendering/chart/ChartLink.d.ts +0 -85
  18. package/types/rendering/chart/ChartRow.d.ts +0 -17
  19. package/types/rendering/chart/ChartSlider.d.ts +0 -54
  20. package/types/rendering/chart/ChartToday.d.ts +0 -31
  21. package/types/rendering/chart/ChartWeekend.d.ts +0 -43
  22. package/types/rendering/chart/Pattern.d.ts +0 -19
  23. package/types/rendering/chart/index.d.ts +0 -33
  24. package/types/rendering/other/GuideLine.d.ts +0 -50
  25. package/types/rendering/other/MiddleResizeLine.d.ts +0 -14
  26. package/types/rendering/scrollbar/index.d.ts +0 -131
  27. package/types/rendering/table/Checkbox.d.ts +0 -39
  28. package/types/rendering/table/TableBody.d.ts +0 -25
  29. package/types/rendering/table/TableCell.d.ts +0 -43
  30. package/types/rendering/table/TableHeader.d.ts +0 -13
  31. package/types/rendering/table/TableHeaderCell.d.ts +0 -20
  32. package/types/rendering/table/TableHeaderGroup.d.ts +0 -15
  33. package/types/rendering/table/TableRow.d.ts +0 -57
  34. package/types/rendering/table/index.d.ts +0 -15
  35. package/types/store/ColumnManager.d.ts +0 -75
  36. package/types/store/DataManager.d.ts +0 -119
  37. package/types/store/OptionManager.d.ts +0 -11
  38. package/types/store/TimeAxis.d.ts +0 -88
  39. package/types/store/index.d.ts +0 -21
  40. package/types/types/chart.d.ts +0 -59
  41. package/types/types/event.d.ts +0 -21
  42. package/types/types/global.d.ts +0 -9
  43. package/types/types/index.d.ts +0 -21
  44. package/types/types/link.d.ts +0 -23
  45. package/types/types/options.d.ts +0 -552
  46. package/types/types/render.d.ts +0 -26
  47. package/types/types/styles.d.ts +0 -37
  48. package/types/types/table.d.ts +0 -134
  49. package/types/utils/color.d.ts +0 -148
  50. package/types/utils/helpers.d.ts +0 -43
  51. package/types/utils/id.d.ts +0 -1
  52. package/types/utils/logger.d.ts +0 -88
  53. package/types/utils/size.d.ts +0 -7
  54. package/types/utils/time.d.ts +0 -9
@@ -1,13 +0,0 @@
1
- import { IContext } from "@/types/render";
2
- export declare class TableHeader {
3
- private context;
4
- private container;
5
- private headerElement;
6
- private headerColumns;
7
- constructor(context: IContext, container: HTMLElement);
8
- private initElement;
9
- /**
10
- * 渲染表头
11
- */
12
- render(): void;
13
- }
@@ -1,20 +0,0 @@
1
- import { ITableColumnStandard } from "@/types/table";
2
- import { IContext } from "@/types/render";
3
- import { IColumn } from "@/store/ColumnManager";
4
- export declare class TableHeaderCell {
5
- private context;
6
- private root;
7
- private container;
8
- private column;
9
- private columnElement;
10
- constructor(context: IContext, root: HTMLElement, container: HTMLElement, column: IColumn<ITableColumnStandard>);
11
- private initElement;
12
- /**
13
- * 设置列宽
14
- */
15
- private setWidth;
16
- /**
17
- * 添加拖拽把手
18
- */
19
- private addResizeHandle;
20
- }
@@ -1,15 +0,0 @@
1
- import { IContext } from "@/types/render";
2
- import { IColumn } from "@/store/ColumnManager";
3
- export declare class TableHeaderGroup {
4
- private context;
5
- private root;
6
- private container;
7
- private column;
8
- private groupElement;
9
- private titleContainer;
10
- private childContainer;
11
- private children;
12
- constructor(context: IContext, root: HTMLElement, container: HTMLElement, column: IColumn);
13
- private initElement;
14
- private initChildren;
15
- }
@@ -1,57 +0,0 @@
1
- import { IContext } from "@/types/render";
2
- import type { Task } from "@/models/Task";
3
- export declare class TableRow {
4
- private context;
5
- private container;
6
- private task;
7
- private top;
8
- element: HTMLDivElement;
9
- private cells;
10
- /**
11
- * 创建表格行
12
- * @param context 上下文
13
- * @param container 父容器
14
- * @param task 任务数据
15
- */
16
- constructor(context: IContext, container: HTMLDivElement, task: Task, top: number, raising?: boolean);
17
- /**
18
- * 绑定触发事件
19
- */
20
- private bindEvents;
21
- /**
22
- * 注册全局接收事件
23
- */
24
- private registerEvents;
25
- /**
26
- * 更新行样式
27
- */
28
- private updateStyles;
29
- /**
30
- * 对元素提级
31
- */
32
- raise(): void;
33
- /**
34
- * 更新 top 值
35
- */
36
- updateTop(top: number): void;
37
- /**
38
- * 创建单元格
39
- */
40
- create(): void;
41
- /**
42
- * 更新行
43
- */
44
- update(): void;
45
- /**
46
- * 更新宽度
47
- */
48
- updateWidth(): void;
49
- /**
50
- * 清除单元格
51
- */
52
- private clearCells;
53
- /**
54
- * 移除行
55
- */
56
- remove(): void;
57
- }
@@ -1,15 +0,0 @@
1
- import { IContext } from "@/types/render";
2
- import type { Task } from "@/models/Task";
3
- export declare class Table {
4
- private context;
5
- private container;
6
- private tableContainer;
7
- private tableHeader;
8
- private tableBody;
9
- constructor(context: IContext, container: HTMLElement);
10
- render(top: number, tasks: Task[]): void;
11
- refresh(top: number, tasks: Task[]): void;
12
- updateWidth(): void;
13
- updateTask(task: Task): void;
14
- private listenEvents;
15
- }
@@ -1,75 +0,0 @@
1
- import { ITableColumn, ITableColumnStandard } from "@/types/table";
2
- import { IContext } from "@/types/render";
3
- import type { Task } from "@/models/Task";
4
- /**
5
- * 内部列数据结构
6
- */
7
- export interface IColumn<T extends ITableColumn = ITableColumn> {
8
- /** 显示文本 */
9
- label: string;
10
- /** 层级,默认为1 */
11
- level: number;
12
- /** 当前列最大层级 */
13
- maxLevel: number;
14
- /** 原始列数据 */
15
- column: T;
16
- /** 子项 */
17
- children: IColumn[];
18
- /** 列标识符,用于查找 */
19
- key: string;
20
- /** 标识数组,用于查找。从根到当前列的路径 */
21
- path: string[];
22
- /** 是否为叶子节点 */
23
- isLeaf: boolean;
24
- /** 列宽度 */
25
- width: number | "auto";
26
- }
27
- export interface MergeInfo {
28
- task: Task;
29
- originColumnIndex: number;
30
- colspan: number;
31
- rowspan: number;
32
- }
33
- export declare class ColumnManager {
34
- private context;
35
- /** 源列数据 */
36
- private sourceColumns;
37
- /** 处理后的所有列数据 */
38
- private columns;
39
- /** 叶子列数据,只包含最终显示的列 */
40
- private leafColumns;
41
- /** 临时叶子列数据,用于更新源数据,读取宽度等原信息 */
42
- private temporaryLeafColumns;
43
- /**
44
- * 保存所有行列合并的信息
45
- *
46
- * Map<task_id, Map<col_index, object>>
47
- */
48
- private mergeInfo;
49
- constructor(context: IContext);
50
- /**
51
- * 初始化列数据
52
- */
53
- init(columns?: ITableColumn[]): void;
54
- /**
55
- * 处理列数据,将源数据转换为内部数据结构
56
- */
57
- private processColumns;
58
- /**
59
- * 根据 key 查找列
60
- */
61
- private findColumnByKey;
62
- update(columns: ITableColumn[]): void;
63
- getColumns(): IColumn[];
64
- getColumn(key: string): IColumn | undefined;
65
- getLeafColumns(): IColumn<ITableColumnStandard>[];
66
- getTotalWidth(): number;
67
- getColumnWidth(key: string): number;
68
- setColumnWidth(key: string, width: number): void;
69
- isLastColumn(key: string): boolean;
70
- addMergeInfo(id: string, colIndex: number, info: MergeInfo): void;
71
- getMergeInfo(id: string, colIndex: number): MergeInfo | undefined;
72
- clearMergeInfo(): void;
73
- getHandlerColumn(): IColumn<ITableColumnStandard>;
74
- isMultiHeader(): boolean;
75
- }
@@ -1,119 +0,0 @@
1
- import type { Dayjs } from "dayjs";
2
- import { type EventBus } from "../event";
3
- import { Task } from "../models/Task";
4
- import type { Store } from ".";
5
- export declare class DataManager {
6
- private store;
7
- private event;
8
- /**
9
- * 原始数据
10
- */
11
- private rawData;
12
- /**
13
- * 任务列表。树形结构
14
- */
15
- private tasks;
16
- /**
17
- * 任务映射,使用ID作为键,便于快速查找
18
- */
19
- private taskMap;
20
- /**
21
- * 缓存扁平化的可视任务列表
22
- * 用于提高性能,避免每次都遍历树形结构
23
- */
24
- private visibleTasksCache;
25
- /** 标记缓存是否需要更新 */
26
- private isDirty;
27
- /** 缓存被折叠的任务 ID */
28
- private collapsedTaskIds;
29
- /** 存储当前选中的任务ID */
30
- private selectedTaskId;
31
- /** 选中列表 */
32
- private checkedList;
33
- /** 数据最大层级。 0 开始 */
34
- dataLevel: number;
35
- constructor(store: Store, event: EventBus);
36
- /**
37
- * 设置源数据并初始化任务
38
- */
39
- setData(data: any[], init?: boolean): void;
40
- /**
41
- * 初始化任务
42
- */
43
- private initTasks;
44
- private createTask;
45
- private updateTask;
46
- /**
47
- * 获取源数据
48
- */
49
- getData(): any[];
50
- /**
51
- * 获取所有任务
52
- */
53
- getTasks(asTree?: boolean): Task[];
54
- /**
55
- * 通过 ID 获取任务
56
- */
57
- getTaskById(id: string): Task | undefined;
58
- /**
59
- * 移动任务位置
60
- */
61
- /**
62
- * 展开任务
63
- */
64
- expandTask(id: string, recursive?: boolean): boolean;
65
- /**
66
- * 按条件筛选任务
67
- */
68
- /**
69
- * 排序任务
70
- */
71
- /**
72
- * 获取扁平化的任务列表,包括已展开的子任务
73
- * 使用缓存提高性能,只有在必要时才会重建列表
74
- */
75
- getVisibleTasks(): Task[];
76
- /**
77
- * 获取可展示任务数量
78
- */
79
- getVisibleSize(): number;
80
- /** 检查任务是否可见 */
81
- isTaskVisible(task: Task): boolean;
82
- /**
83
- * 清空所有数据
84
- */
85
- clear(): void;
86
- /**
87
- * 更新子任务的层级
88
- */
89
- /**
90
- * 使缓存失效,标记需要重新生成扁平化任务列表
91
- */
92
- private invalidateCache;
93
- /**
94
- * 选择任务
95
- * @param taskId 任务ID
96
- * @returns 是否选择成功
97
- */
98
- selectTask(taskId: string): boolean;
99
- /**
100
- * 取消任务选择
101
- */
102
- unselectTask(): void;
103
- /**
104
- * 检查任务是否被选中
105
- * @param taskId 任务ID
106
- * @returns 是否被选中
107
- */
108
- isTaskSelected(taskId: string): boolean;
109
- /**
110
- * 获取当前选中的任务
111
- * @returns 选中的任务,如果没有则返回undefined
112
- */
113
- getSelectedTask(): Task | undefined;
114
- getCheckedList(): Task[];
115
- updateCheckedList(checked: boolean, task: Task): void;
116
- toggleAllChecked(checked: boolean): void;
117
- isTaskChecked(task: Task): boolean;
118
- updateTaskTime(task: Task, startTime: Dayjs, endTime: Dayjs, direction?: "left" | "right" | "both", oldTasks?: Task[]): void;
119
- }
@@ -1,11 +0,0 @@
1
- import { Task } from "@/models/Task";
2
- import { IOptionConfig, IOptions } from "@/types";
3
- import { IGanttOptions } from "@/types/options";
4
- export declare class OptionManager {
5
- private options;
6
- constructor();
7
- getOptions(): IGanttOptions;
8
- setOptions(options: IOptions, config?: IOptionConfig): void;
9
- update(newOptions: IOptions): void;
10
- getRowBackgroundColor(task: Task): string;
11
- }
@@ -1,88 +0,0 @@
1
- import dayjs, { type Dayjs } from "../utils/time";
2
- import { IGanttOptions } from "@/types/options";
3
- /** 表头项 */
4
- export interface TimelineItem {
5
- /** 时间对象 */
6
- date: Dayjs;
7
- /** 展示的文本,支持自定义 */
8
- label: string;
9
- /** 子项内容 */
10
- children?: TimelineItem[];
11
- /** 是否隐藏 */
12
- hide?: boolean;
13
- }
14
- export declare class TimeAxis {
15
- private startTime;
16
- private endTime;
17
- /** 结束的标准时间。切换单位会影响结尾的扩展,需要单独记录一个标准时间 */
18
- private targetEnd;
19
- /** 固定起始日期 */
20
- private strictStart;
21
- /** 固定截止日期 */
22
- private strictEnd;
23
- /** 是否锁定时间范围 */
24
- private isStrict;
25
- /** 是否自适应宽度 */
26
- private isAuto;
27
- /** 表头的日期列表 */
28
- private timeline;
29
- private headerGroupFormat?;
30
- private headerCellFormat?;
31
- private isDirty;
32
- /** 是否第一次赋值,如果第一次赋值,允许全部赋值 */
33
- private isFirstTime;
34
- /** 总宽度 */
35
- private allWidth;
36
- /** 每一格的宽度 */
37
- private cellWidth;
38
- /** 用户设定的单位 */
39
- private unit;
40
- constructor();
41
- getStartTime(): dayjs.Dayjs;
42
- getEndTime(): dayjs.Dayjs;
43
- getCellWidth(): number;
44
- getCellCount(): number;
45
- getCellUnit(): "day" | "hour";
46
- setAllWidth(width: number): void;
47
- getTimeLeft(time: Dayjs): number;
48
- /**
49
- * 根据横向位置计算对应的时间
50
- * @param left 横向位置
51
- * @returns 对应的时间对象
52
- */
53
- getTimeByLeft(left: number): Dayjs;
54
- init(options: IGanttOptions): void;
55
- update(options: IGanttOptions): void;
56
- setDate(start?: Dayjs, end?: Dayjs): void;
57
- /** 获取表头的日期列表 */
58
- getTimeline(): TimelineItem[];
59
- clear(): void;
60
- /**
61
- * 缓存失效标记
62
- */
63
- private invalidateCache;
64
- /** 获取细粒度单位 */
65
- private getFinelyUnit;
66
- /** 获取下层单位 */
67
- private getChildUnit;
68
- /** 获取上层单位 */
69
- private getGroupUnit;
70
- /** 格式化上层文本 */
71
- private formatterGroupLabel;
72
- /**
73
- * 格式化下层文本
74
- */
75
- private formatterCellLabel;
76
- /**
77
- * 获取时间轴的总宽度
78
- * @returns 时间轴总宽度(像素)
79
- */
80
- getTotalWidth(): number;
81
- expand(type: "left" | "right" | "all", count?: number): void;
82
- /**
83
- * 判定一个时间是否在时间轴上
84
- * @param time 时间
85
- * @returns 是否在时间轴上
86
- */
87
- isInTimeAxis(time: Dayjs): boolean;
88
- }
@@ -1,21 +0,0 @@
1
- import { OptionManager } from "./OptionManager";
2
- import { DataManager } from "./DataManager";
3
- import { ColumnManager } from "./ColumnManager";
4
- import { TimeAxis } from "./TimeAxis";
5
- import { Dayjs } from "dayjs";
6
- import { IContext } from "@/types/render";
7
- import { IOptionConfig, IOptions } from "@/types";
8
- export declare class Store {
9
- private context;
10
- private optionManager;
11
- private dataManager;
12
- private columnManager;
13
- private timeAxis;
14
- constructor(context: IContext, options?: IOptions);
15
- getOptionManager(): OptionManager;
16
- getDataManager(): DataManager;
17
- getColumnManager(): ColumnManager;
18
- getTimeAxis(): TimeAxis;
19
- setOption(options: IOptions, config?: IOptionConfig): void;
20
- updateTime(start?: Dayjs, end?: Dayjs): void;
21
- }
@@ -1,59 +0,0 @@
1
- import { XGanttUnit } from "./options";
2
-
3
- export interface IChartOptions {
4
- /**
5
- * 开始时间。强制设置开始时间,覆盖数据中的开始时间。
6
- *
7
- * @description 给定开始时间后,图表将使用该日期作为起始,而不是数据的起始时间
8
- */
9
- startTime?: Date | string;
10
-
11
- /**
12
- * 结束时间。强制设置结束时间,覆盖数据中的结束时间
13
- *
14
- * @description 给定结束时间后,图表将使用该日期作为结束,而不是数据的结束时间
15
- */
16
- endTime?: Date | string;
17
-
18
- /**
19
- * 自适应 cell 宽度。允许右侧部分基于当前宽度,自适应自定义的起止时间。
20
- *
21
- * 当起止日期区间过短,会自动撑满整个区域。当日期区间过长,会以 cellWidth 的值作为最小值,绘制整个区域
22
- *
23
- * @requires startTime 此功能需要自定义起止时间
24
- * @requires endTime 此功能需要自定义起止时间
25
- *
26
- * @description 此功能会导致 cellWidth 失效。所有 cell 会自动计算宽度
27
- */
28
- autoCellWidth: boolean;
29
-
30
- /**
31
- * 时间单元格宽度
32
- *
33
- * @description small | normal | large 会根据当前展示单位,自动计算宽度。或者直接给对象,指定具体每一个单位下 cell 的宽度值
34
- *
35
- * @description 如果同时给定了起止时间,则图表则只会渲染给定的时间区间,并且指定宽度将失效。(失效是指:如果给定时间区间范围小于可视范围,则会自动撑满宽度,此时每一格 cell 的宽度则会变为自动;如果时间区间范围大于可视范围,则继续按照当前设定宽度展示,超出部分可通过滚动条移动展示)
36
- */
37
- cellWidth:
38
- | number
39
- | "small"
40
- | "normal"
41
- | "large"
42
- | Partial<Record<XGanttUnit, number>>;
43
-
44
- /**
45
- * 表头组(上层)格式化
46
- *
47
- * @description 字符串:使用 dayjs 的格式化功能参数。支持 {@link https://day.js.org/docs/en/display/format|默认占位符},以及所有 {@link https://day.js.org/docs/en/plugin/advanced-format|AdvancedFormat} 的占位符
48
- * @description 函数:可以根据当前日期和单位,返回自定义的格式化字符串。如果函数返回为空,则回退到默认格式化
49
- */
50
- headerGroupFormat?: string | ((date: Date, unit: XGanttUnit) => string);
51
-
52
- /**
53
- * 表头单元格格式化
54
- *
55
- * @description 字符串:使用 dayjs 的格式化功能参数。支持 {@link https://day.js.org/docs/en/display/format|默认占位符},以及所有 {@link https://day.js.org/docs/en/plugin/advanced-format|AdvancedFormat} 的占位符
56
- * @description 函数:可以根据当前日期和单位,返回自定义的格式化字符串。如果函数返回为空,则回退到默认格式化
57
- */
58
- headerCellFormat?: string | ((date: Date, unit: XGanttUnit) => string);
59
- }
@@ -1,21 +0,0 @@
1
- import { ErrorType } from "../event";
2
- import { ILink } from "./link";
3
-
4
- export interface EventMap {
5
- error: (error: ErrorType) => void;
6
- "update:link": (link: ILink) => void;
7
- "create:link": (link: ILink) => void;
8
- "select:link": (
9
- add: ILink | null,
10
- cancel: ILink | null,
11
- all: ILink[]
12
- ) => void;
13
- select: (data: any[], checked: boolean, all: any[]) => void;
14
- "click:row": (e: MouseEvent, data: any) => void;
15
- "dblclick:row": (e: MouseEvent, data: any) => void;
16
- "contextmenu:row": (e: MouseEvent, data: any) => void;
17
- "click:slider": (e: MouseEvent, data: any) => void;
18
- "dblclick:slider": (e: MouseEvent, data: any) => void;
19
- "contextmenu:slider": (e: MouseEvent, data: any) => void;
20
- move: (data: { row: any; old: any }[]) => void;
21
- }
@@ -1,9 +0,0 @@
1
- // 全局类型声明
2
- declare const __VERSION__: string;
3
-
4
- // 导出到全局命名空间
5
- declare global {
6
- const __VERSION__: string;
7
- }
8
-
9
- export {};
@@ -1,21 +0,0 @@
1
- import { IGanttOptions } from "./options";
2
-
3
- type DeepPartial<T> = {
4
- [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
5
- };
6
-
7
- export type IOptions = DeepPartial<IGanttOptions>;
8
-
9
- export type IOptionConfig = {
10
- /** 是否合并选项 */
11
- merge?: boolean;
12
- };
13
-
14
- export interface EmitData {
15
- /** 原始数据 */
16
- data: any;
17
- /** 当前数据的索引 */
18
- $index: number;
19
- /** 当前数据的层级。 1 开始 */
20
- level: number;
21
- }
@@ -1,23 +0,0 @@
1
- export interface ILink {
2
- /** 起始任务 id */
3
- from: any;
4
- /** 截止任务 id */
5
- to: any;
6
- /** 自定义颜色 */
7
- color?: string;
8
- /**
9
- * 连线类型。它允许用户配置连线的具体类型。具体讨论参考 {@link https://github.com/xpyjs/gantt/issues/119|关于前置后置任务的连线}
10
- *
11
- * 当前针对已知的四种类型进行了补充:
12
- * - `FS` - Finish to Start
13
- * - `FF` - Finish to Finish
14
- * - `SS` - Start to Start
15
- * - `SF` - Start to Finish
16
- *
17
- * 默认情况下使用 `FS`,即 Finish to Start。
18
- *
19
- * 无论如何配置,连线始终是 from - to 的方向,type 定义了连线在 from / to 任务中出现的位置,左侧定义为 Start,右侧定义为 Finish。
20
- */
21
- type?: "FS" | "FF" | "SS" | "SF";
22
- [key: string]: any;
23
- }