@ganttloom/gantt-vue 0.2.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.
- package/LICENSE +21 -0
- package/README.md +203 -0
- package/dist/index.cjs +342 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +456 -0
- package/dist/index.d.ts +456 -0
- package/dist/index.js +322 -0
- package/dist/index.js.map +1 -0
- package/package.json +59 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
// src/GanttChart.ts
|
|
2
|
+
import "@ganttloom/gantt-core/styles.css";
|
|
3
|
+
import {
|
|
4
|
+
defineComponent,
|
|
5
|
+
getCurrentInstance,
|
|
6
|
+
h,
|
|
7
|
+
onBeforeUnmount as onBeforeUnmount2,
|
|
8
|
+
ref,
|
|
9
|
+
watch as watch2
|
|
10
|
+
} from "vue";
|
|
11
|
+
|
|
12
|
+
// src/useGanttChart.ts
|
|
13
|
+
import { onBeforeUnmount, onMounted, shallowRef, watch } from "vue";
|
|
14
|
+
import { GanttChart as GanttCore } from "@ganttloom/gantt-core";
|
|
15
|
+
function useGanttChart(containerRef, getTasks, getDependencies, getOptions) {
|
|
16
|
+
const chart = shallowRef(null);
|
|
17
|
+
const canUndo = shallowRef(false);
|
|
18
|
+
const canRedo = shallowRef(false);
|
|
19
|
+
let onHistoryChange;
|
|
20
|
+
onMounted(() => {
|
|
21
|
+
const container = containerRef.value;
|
|
22
|
+
if (!container) return;
|
|
23
|
+
const instance = new GanttCore(container, getTasks(), getDependencies(), getOptions());
|
|
24
|
+
chart.value = instance;
|
|
25
|
+
canUndo.value = instance.canUndo;
|
|
26
|
+
canRedo.value = instance.canRedo;
|
|
27
|
+
onHistoryChange = (state) => {
|
|
28
|
+
canUndo.value = state.canUndo;
|
|
29
|
+
canRedo.value = state.canRedo;
|
|
30
|
+
};
|
|
31
|
+
instance.on("history-change", onHistoryChange);
|
|
32
|
+
});
|
|
33
|
+
onBeforeUnmount(() => {
|
|
34
|
+
const instance = chart.value;
|
|
35
|
+
if (!instance) return;
|
|
36
|
+
if (onHistoryChange) instance.off("history-change", onHistoryChange);
|
|
37
|
+
instance.destroy();
|
|
38
|
+
chart.value = null;
|
|
39
|
+
canUndo.value = false;
|
|
40
|
+
canRedo.value = false;
|
|
41
|
+
});
|
|
42
|
+
watch(getTasks, (tasks) => chart.value?.setTasks(tasks));
|
|
43
|
+
watch(getDependencies, (deps) => chart.value?.setDependencies(deps));
|
|
44
|
+
watch(getOptions, (options) => chart.value?.setOptions(options));
|
|
45
|
+
return { chart, canUndo, canRedo };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// src/GanttChart.ts
|
|
49
|
+
var EMPTY_RENDER_MODEL = {
|
|
50
|
+
width: 0,
|
|
51
|
+
height: 0,
|
|
52
|
+
rowHeight: 0,
|
|
53
|
+
headerHeight: 0,
|
|
54
|
+
rows: [],
|
|
55
|
+
bars: [],
|
|
56
|
+
links: [],
|
|
57
|
+
ticks: [],
|
|
58
|
+
columns: [],
|
|
59
|
+
theme: {},
|
|
60
|
+
markers: [],
|
|
61
|
+
rangeStart: /* @__PURE__ */ new Date(0)
|
|
62
|
+
};
|
|
63
|
+
function hasInitialListener(eventName) {
|
|
64
|
+
const instance = getCurrentInstance();
|
|
65
|
+
return !!(instance?.vnode.props && eventName in instance.vnode.props);
|
|
66
|
+
}
|
|
67
|
+
var ganttChartProps = {
|
|
68
|
+
tasks: { type: Array, required: true },
|
|
69
|
+
dependencies: { type: Array, default: () => [] },
|
|
70
|
+
viewMode: { type: String, default: void 0 },
|
|
71
|
+
columns: { type: Array, default: void 0 },
|
|
72
|
+
theme: { type: Object, default: void 0 },
|
|
73
|
+
colorScheme: { type: String, default: void 0 },
|
|
74
|
+
columnWidth: { type: Number, default: void 0 },
|
|
75
|
+
readonly: { type: Boolean, default: void 0 },
|
|
76
|
+
showProgress: { type: Boolean, default: void 0 },
|
|
77
|
+
showDependencies: { type: Boolean, default: void 0 },
|
|
78
|
+
gridPanelWidth: { type: Number, default: void 0 },
|
|
79
|
+
showCriticalPath: { type: Boolean, default: void 0 },
|
|
80
|
+
showBaseline: { type: Boolean, default: void 0 },
|
|
81
|
+
showDeadlines: { type: Boolean, default: void 0 },
|
|
82
|
+
showAssigneeAvatars: { type: Boolean, default: void 0 },
|
|
83
|
+
enableHistory: { type: Boolean, default: void 0 },
|
|
84
|
+
keyboardAccessible: { type: Boolean, default: void 0 },
|
|
85
|
+
virtualScroll: { type: Boolean, default: void 0 },
|
|
86
|
+
autoSchedule: { type: Boolean, default: void 0 },
|
|
87
|
+
pagination: { type: Object, default: void 0 },
|
|
88
|
+
snapToUnit: { type: [String, Boolean], default: void 0 },
|
|
89
|
+
/** working-day/holiday definition used to shade non-working time and (with autoSchedule) skip it when cascading */
|
|
90
|
+
calendar: { type: Object, default: void 0 },
|
|
91
|
+
/** arbitrary labeled vertical lines on the timeline, independent of any task */
|
|
92
|
+
markers: { type: Array, default: void 0 },
|
|
93
|
+
/** a group task with no explicit `progress` gets a duration-weighted average of its children's progress instead of 0 */
|
|
94
|
+
autoRollupProgress: { type: Boolean, default: void 0 },
|
|
95
|
+
/** enables click/ctrl-click/shift-click multi-selection of task bars, and the handle's bulkShiftDates()/bulkDelete() */
|
|
96
|
+
selectable: { type: Boolean, default: void 0 }
|
|
97
|
+
};
|
|
98
|
+
var ganttChartEmits = {
|
|
99
|
+
"date-change": (_task, _start, _end) => true,
|
|
100
|
+
"progress-change": (_task, _progress) => true,
|
|
101
|
+
"dependency-create": (_dep) => true,
|
|
102
|
+
"dependency-remove": (_dep) => true,
|
|
103
|
+
"dependency-dblclick": (_dep) => true,
|
|
104
|
+
"task-click": (_task) => true,
|
|
105
|
+
"group-toggle": (_task, _collapsed) => true,
|
|
106
|
+
"context-menu": (_task, _evt) => true,
|
|
107
|
+
"task-create": (_task) => true,
|
|
108
|
+
"column-resize": (_columnId, _width) => true,
|
|
109
|
+
"column-reorder": (_order) => true,
|
|
110
|
+
"task-reorder": (_draggedTaskId, _targetTaskId, _position) => true,
|
|
111
|
+
"selection-change": (_taskIds) => true
|
|
112
|
+
};
|
|
113
|
+
var GanttChart = defineComponent({
|
|
114
|
+
name: "GanttChart",
|
|
115
|
+
props: ganttChartProps,
|
|
116
|
+
emits: ganttChartEmits,
|
|
117
|
+
setup(props, { emit, expose }) {
|
|
118
|
+
const containerRef = ref(null);
|
|
119
|
+
const noop = () => {
|
|
120
|
+
};
|
|
121
|
+
const wireTaskCreate = hasInitialListener("onTaskCreate");
|
|
122
|
+
const wireColumnResize = hasInitialListener("onColumnResize");
|
|
123
|
+
const wireColumnReorder = hasInitialListener("onColumnReorder");
|
|
124
|
+
const wireTaskReorder = hasInitialListener("onTaskReorder");
|
|
125
|
+
const wireDependencyDblClick = hasInitialListener("onDependencyDblClick");
|
|
126
|
+
const getOptions = () => ({
|
|
127
|
+
viewMode: props.viewMode,
|
|
128
|
+
columns: props.columns,
|
|
129
|
+
theme: props.theme,
|
|
130
|
+
colorScheme: props.colorScheme,
|
|
131
|
+
columnWidth: props.columnWidth,
|
|
132
|
+
readonly: props.readonly,
|
|
133
|
+
showProgress: props.showProgress,
|
|
134
|
+
showDependencies: props.showDependencies,
|
|
135
|
+
gridPanelWidth: props.gridPanelWidth,
|
|
136
|
+
showCriticalPath: props.showCriticalPath,
|
|
137
|
+
showBaseline: props.showBaseline,
|
|
138
|
+
showDeadlines: props.showDeadlines,
|
|
139
|
+
showAssigneeAvatars: props.showAssigneeAvatars,
|
|
140
|
+
enableHistory: props.enableHistory,
|
|
141
|
+
keyboardAccessible: props.keyboardAccessible,
|
|
142
|
+
virtualScroll: props.virtualScroll,
|
|
143
|
+
autoSchedule: props.autoSchedule,
|
|
144
|
+
pagination: props.pagination,
|
|
145
|
+
snapToUnit: props.snapToUnit,
|
|
146
|
+
calendar: props.calendar,
|
|
147
|
+
markers: props.markers,
|
|
148
|
+
autoRollupProgress: props.autoRollupProgress,
|
|
149
|
+
selectable: props.selectable,
|
|
150
|
+
onContextMenu: noop,
|
|
151
|
+
onTaskCreate: wireTaskCreate ? noop : void 0,
|
|
152
|
+
onColumnResize: wireColumnResize ? noop : void 0,
|
|
153
|
+
onColumnReorder: wireColumnReorder ? noop : void 0,
|
|
154
|
+
onTaskReorder: wireTaskReorder ? noop : void 0,
|
|
155
|
+
onDependencyDblClick: wireDependencyDblClick ? noop : void 0
|
|
156
|
+
});
|
|
157
|
+
const { chart } = useGanttChart(
|
|
158
|
+
containerRef,
|
|
159
|
+
() => props.tasks,
|
|
160
|
+
() => props.dependencies,
|
|
161
|
+
getOptions
|
|
162
|
+
);
|
|
163
|
+
watch2(getOptions, (options) => chart.value?.setOptions(options));
|
|
164
|
+
watch2(chart, (instance, _prev, onCleanup) => {
|
|
165
|
+
if (!instance) return;
|
|
166
|
+
instance.on("date-change", handleDateChange);
|
|
167
|
+
instance.on("progress-change", handleProgressChange);
|
|
168
|
+
instance.on("dependency-create", handleDependencyCreate);
|
|
169
|
+
instance.on("dependency-remove", handleDependencyRemove);
|
|
170
|
+
instance.on("dependency-dblclick", handleDependencyDblClick);
|
|
171
|
+
instance.on("task-click", handleTaskClick);
|
|
172
|
+
instance.on("group-toggle", handleGroupToggle);
|
|
173
|
+
instance.on("context-menu", handleContextMenu);
|
|
174
|
+
instance.on("task-create", handleTaskCreate);
|
|
175
|
+
instance.on("column-resize", handleColumnResize);
|
|
176
|
+
instance.on("column-reorder", handleColumnReorder);
|
|
177
|
+
instance.on("task-reorder", handleTaskReorder);
|
|
178
|
+
instance.on("selection-change", handleSelectionChange);
|
|
179
|
+
onCleanup(() => {
|
|
180
|
+
instance.off("date-change", handleDateChange);
|
|
181
|
+
instance.off("progress-change", handleProgressChange);
|
|
182
|
+
instance.off("dependency-create", handleDependencyCreate);
|
|
183
|
+
instance.off("dependency-remove", handleDependencyRemove);
|
|
184
|
+
instance.off("dependency-dblclick", handleDependencyDblClick);
|
|
185
|
+
instance.off("task-click", handleTaskClick);
|
|
186
|
+
instance.off("group-toggle", handleGroupToggle);
|
|
187
|
+
instance.off("context-menu", handleContextMenu);
|
|
188
|
+
instance.off("task-create", handleTaskCreate);
|
|
189
|
+
instance.off("column-resize", handleColumnResize);
|
|
190
|
+
instance.off("column-reorder", handleColumnReorder);
|
|
191
|
+
instance.off("task-reorder", handleTaskReorder);
|
|
192
|
+
instance.off("selection-change", handleSelectionChange);
|
|
193
|
+
});
|
|
194
|
+
}, { flush: "sync" });
|
|
195
|
+
function handleDateChange(p) {
|
|
196
|
+
emit("date-change", p.task, p.start, p.end);
|
|
197
|
+
}
|
|
198
|
+
function handleProgressChange(p) {
|
|
199
|
+
emit("progress-change", p.task, p.progress);
|
|
200
|
+
}
|
|
201
|
+
function handleDependencyCreate(dep) {
|
|
202
|
+
emit("dependency-create", dep);
|
|
203
|
+
}
|
|
204
|
+
function handleDependencyRemove(dep) {
|
|
205
|
+
emit("dependency-remove", dep);
|
|
206
|
+
}
|
|
207
|
+
function handleDependencyDblClick(dep) {
|
|
208
|
+
emit("dependency-dblclick", dep);
|
|
209
|
+
}
|
|
210
|
+
function handleTaskClick(p) {
|
|
211
|
+
emit("task-click", p.task);
|
|
212
|
+
}
|
|
213
|
+
function handleGroupToggle(p) {
|
|
214
|
+
emit("group-toggle", p.task, p.collapsed);
|
|
215
|
+
}
|
|
216
|
+
function handleContextMenu(p) {
|
|
217
|
+
emit("context-menu", p.task, p.evt);
|
|
218
|
+
}
|
|
219
|
+
function handleTaskCreate(p) {
|
|
220
|
+
emit("task-create", p.task);
|
|
221
|
+
}
|
|
222
|
+
function handleColumnResize(p) {
|
|
223
|
+
emit("column-resize", p.columnId, p.width);
|
|
224
|
+
}
|
|
225
|
+
function handleColumnReorder(p) {
|
|
226
|
+
emit("column-reorder", p.order);
|
|
227
|
+
}
|
|
228
|
+
function handleTaskReorder(p) {
|
|
229
|
+
emit("task-reorder", p.draggedTaskId, p.targetTaskId, p.position);
|
|
230
|
+
}
|
|
231
|
+
function handleSelectionChange(p) {
|
|
232
|
+
emit("selection-change", p.taskIds);
|
|
233
|
+
}
|
|
234
|
+
onBeforeUnmount2(() => {
|
|
235
|
+
containerRef.value = null;
|
|
236
|
+
});
|
|
237
|
+
const handle = {
|
|
238
|
+
undo: () => chart.value?.undo(),
|
|
239
|
+
redo: () => chart.value?.redo(),
|
|
240
|
+
canUndo: () => chart.value?.canUndo ?? false,
|
|
241
|
+
canRedo: () => chart.value?.canRedo ?? false,
|
|
242
|
+
expandAll: () => chart.value?.expandAll(),
|
|
243
|
+
collapseAll: () => chart.value?.collapseAll(),
|
|
244
|
+
toggleGroup: (taskId) => chart.value?.toggleGroup(taskId),
|
|
245
|
+
removeDependency: (fromId, toId) => chart.value?.removeDependency(fromId, toId),
|
|
246
|
+
updateDependency: (fromId, toId, partial) => chart.value?.updateDependency(fromId, toId, partial),
|
|
247
|
+
updateTask: (id, partial) => chart.value?.updateTask(id, partial),
|
|
248
|
+
setViewMode: (mode) => chart.value?.setViewMode(mode),
|
|
249
|
+
fitToViewport: (containerWidthPx) => chart.value?.fitToViewport(containerWidthPx),
|
|
250
|
+
scrollToToday: () => chart.value?.scrollToToday(),
|
|
251
|
+
scrollToRangeStart: () => chart.value?.scrollToRangeStart(),
|
|
252
|
+
scrollToRangeEnd: () => chart.value?.scrollToRangeEnd(),
|
|
253
|
+
getPageCount: () => chart.value?.getPageCount() ?? 1,
|
|
254
|
+
setPage: (page) => chart.value?.setPage(page),
|
|
255
|
+
zoomIn: (factor) => chart.value?.zoomIn(factor),
|
|
256
|
+
zoomOut: (factor) => chart.value?.zoomOut(factor),
|
|
257
|
+
getZoomLevel: () => chart.value?.getZoomLevel() ?? 0,
|
|
258
|
+
getResourceHistogram: (options) => chart.value?.getResourceHistogram(options) ?? [],
|
|
259
|
+
getLeveledTasks: (options) => chart.value?.getLeveledTasks(options) ?? { tasks: [], shifted: [] },
|
|
260
|
+
selectTask: (id, options) => chart.value?.selectTask(id, options),
|
|
261
|
+
selectAllVisible: () => chart.value?.selectAllVisible(),
|
|
262
|
+
clearSelection: () => chart.value?.clearSelection(),
|
|
263
|
+
getSelectedTaskIds: () => chart.value?.getSelectedTaskIds() ?? [],
|
|
264
|
+
bulkShiftDates: (deltaMs) => chart.value?.bulkShiftDates(deltaMs),
|
|
265
|
+
bulkDelete: () => chart.value?.bulkDelete(),
|
|
266
|
+
toSVGString: () => chart.value?.toSVGString() ?? "",
|
|
267
|
+
toPNGDataURL: () => chart.value?.toPNGDataURL() ?? Promise.resolve(""),
|
|
268
|
+
toPNGDataURLs: (options) => chart.value?.toPNGDataURLs(options) ?? Promise.resolve([]),
|
|
269
|
+
getRenderModel: () => chart.value?.getRenderModel() ?? EMPTY_RENDER_MODEL,
|
|
270
|
+
getInstance: () => chart.value
|
|
271
|
+
};
|
|
272
|
+
expose(handle);
|
|
273
|
+
return () => h("div", { ref: containerRef });
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
var GanttChart_default = GanttChart;
|
|
277
|
+
|
|
278
|
+
// src/index.ts
|
|
279
|
+
import {
|
|
280
|
+
computeWBSCodes,
|
|
281
|
+
applyConstraint,
|
|
282
|
+
isWorkingDay,
|
|
283
|
+
isHoliday,
|
|
284
|
+
isWithinWorkingHours,
|
|
285
|
+
isWorkingTime,
|
|
286
|
+
nextWorkingDay,
|
|
287
|
+
previousWorkingDay,
|
|
288
|
+
shiftToWorkingDay,
|
|
289
|
+
shiftToWorkingTime,
|
|
290
|
+
computeResourceHistogram,
|
|
291
|
+
renderResourceHistogramSVG,
|
|
292
|
+
filterTasks,
|
|
293
|
+
colorByField,
|
|
294
|
+
applyColorByField,
|
|
295
|
+
DEFAULT_PALETTE,
|
|
296
|
+
DENSITY_PRESETS,
|
|
297
|
+
levelResources
|
|
298
|
+
} from "@ganttloom/gantt-core";
|
|
299
|
+
export {
|
|
300
|
+
DEFAULT_PALETTE,
|
|
301
|
+
DENSITY_PRESETS,
|
|
302
|
+
GanttChart,
|
|
303
|
+
applyColorByField,
|
|
304
|
+
applyConstraint,
|
|
305
|
+
colorByField,
|
|
306
|
+
computeResourceHistogram,
|
|
307
|
+
computeWBSCodes,
|
|
308
|
+
GanttChart_default as default,
|
|
309
|
+
filterTasks,
|
|
310
|
+
isHoliday,
|
|
311
|
+
isWithinWorkingHours,
|
|
312
|
+
isWorkingDay,
|
|
313
|
+
isWorkingTime,
|
|
314
|
+
levelResources,
|
|
315
|
+
nextWorkingDay,
|
|
316
|
+
previousWorkingDay,
|
|
317
|
+
renderResourceHistogramSVG,
|
|
318
|
+
shiftToWorkingDay,
|
|
319
|
+
shiftToWorkingTime,
|
|
320
|
+
useGanttChart
|
|
321
|
+
};
|
|
322
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/GanttChart.ts","../src/useGanttChart.ts","../src/index.ts"],"sourcesContent":["// Pulls in the core's default styles so consumers get a working chart out of the box.\n// This resolves through gantt-core's package.json \"exports\" map (\"./styles.css\" -> \"./dist/styles.css\").\n// If your bundler can't resolve CSS imports from a dependency's export map, import it yourself instead:\n// import \"@ganttloom/gantt-core/styles.css\";\nimport \"@ganttloom/gantt-core/styles.css\";\n\nimport {\n defineComponent,\n getCurrentInstance,\n h,\n onBeforeUnmount,\n ref,\n watch,\n type ExtractPropTypes,\n type PropType,\n} from \"vue\";\nimport type {\n GanttChart as GanttCore,\n GanttColumn,\n GanttDependency,\n GanttMarker,\n GanttOptions,\n GanttRenderModel,\n GanttTask,\n GanttTheme,\n ResourceHistogramOptions,\n ResourceLoadBucket,\n ResourceLevelingOptions,\n ResourceLevelingResult,\n ViewMode,\n WorkingCalendar,\n} from \"@ganttloom/gantt-core\";\nimport { useGanttChart } from \"./useGanttChart\";\n\n/** Imperative escape hatches, available via a template ref (see the package README). */\nexport interface GanttChartHandle {\n undo(): void;\n redo(): void;\n canUndo(): boolean;\n canRedo(): boolean;\n expandAll(): void;\n collapseAll(): void;\n toggleGroup(taskId: string): void;\n removeDependency(fromId: string, toId: string): void;\n updateDependency(fromId: string, toId: string, partial: Partial<GanttDependency>): void;\n updateTask(id: string, partial: Partial<GanttTask>): void;\n setViewMode(mode: ViewMode): void;\n fitToViewport(containerWidthPx: number): void;\n scrollToToday(): void;\n scrollToRangeStart(): void;\n scrollToRangeEnd(): void;\n getPageCount(): number;\n setPage(page: number): void;\n zoomIn(factor?: number): void;\n zoomOut(factor?: number): void;\n getZoomLevel(): number;\n getResourceHistogram(options?: ResourceHistogramOptions): ResourceLoadBucket[];\n getLeveledTasks(options?: ResourceLevelingOptions): ResourceLevelingResult;\n selectTask(id: string, options?: { additive?: boolean }): void;\n selectAllVisible(): void;\n clearSelection(): void;\n getSelectedTaskIds(): string[];\n bulkShiftDates(deltaMs: number): void;\n bulkDelete(): void;\n toSVGString(): string;\n toPNGDataURL(): Promise<string>;\n toPNGDataURLs(options?: { pageWidthPx?: number; pageHeightPx?: number }): Promise<string[]>;\n getRenderModel(): GanttRenderModel | null;\n /** Direct access to the underlying framework-agnostic core instance (null before mount). */\n getInstance(): GanttCore | null;\n}\n\nconst EMPTY_RENDER_MODEL: GanttRenderModel = {\n width: 0,\n height: 0,\n rowHeight: 0,\n headerHeight: 0,\n rows: [],\n bars: [],\n links: [],\n ticks: [],\n columns: [],\n theme: {} as GanttTheme,\n markers: [],\n rangeStart: new Date(0),\n};\n\n/**\n * Checks whether the parent actually bound a listener for `eventName` (e.g. \"onTaskCreate\")\n * on this component's *initial* vnode. A handful of gantt-core options only wire up their\n * DOM interaction (drag-to-create, column resize/reorder, dependency double-click, context\n * menu) when the corresponding callback is truthy AT CONSTRUCTION TIME — so a stable no-op\n * is passed there to force the wiring on, and the real dispatch goes through the reactive\n * \"task-create\" etc. event subscription below instead. Reading `vnode.props` (rather than a\n * declared prop/emit) is what lets this stay accurate for both `@task-create=\"...\"` template\n * listeners and a plain `onTaskCreate` prop, without needing the caller to pass anything else.\n */\nfunction hasInitialListener(eventName: string): boolean {\n const instance = getCurrentInstance();\n return !!(instance?.vnode.props && eventName in instance.vnode.props);\n}\n\nconst ganttChartProps = {\n tasks: { type: Array as PropType<GanttTask[]>, required: true },\n dependencies: { type: Array as PropType<GanttDependency[]>, default: () => [] },\n viewMode: { type: String as PropType<ViewMode>, default: undefined },\n columns: { type: Array as PropType<GanttColumn[]>, default: undefined },\n theme: { type: Object as PropType<Partial<GanttTheme>>, default: undefined },\n colorScheme: { type: String as PropType<\"light\" | \"dark\" | \"auto\">, default: undefined },\n columnWidth: { type: Number, default: undefined },\n readonly: { type: Boolean, default: undefined },\n showProgress: { type: Boolean, default: undefined },\n showDependencies: { type: Boolean, default: undefined },\n gridPanelWidth: { type: Number, default: undefined },\n showCriticalPath: { type: Boolean, default: undefined },\n showBaseline: { type: Boolean, default: undefined },\n showDeadlines: { type: Boolean, default: undefined },\n showAssigneeAvatars: { type: Boolean, default: undefined },\n enableHistory: { type: Boolean, default: undefined },\n keyboardAccessible: { type: Boolean, default: undefined },\n virtualScroll: { type: Boolean, default: undefined },\n autoSchedule: { type: Boolean, default: undefined },\n pagination: { type: Object as PropType<{ pageSize: number; page: number }>, default: undefined },\n snapToUnit: { type: [String, Boolean] as PropType<\"hour\" | \"day\" | \"week\" | false>, default: undefined },\n /** working-day/holiday definition used to shade non-working time and (with autoSchedule) skip it when cascading */\n calendar: { type: Object as PropType<WorkingCalendar>, default: undefined },\n /** arbitrary labeled vertical lines on the timeline, independent of any task */\n markers: { type: Array as PropType<GanttMarker[]>, default: undefined },\n /** a group task with no explicit `progress` gets a duration-weighted average of its children's progress instead of 0 */\n autoRollupProgress: { type: Boolean, default: undefined },\n /** enables click/ctrl-click/shift-click multi-selection of task bars, and the handle's bulkShiftDates()/bulkDelete() */\n selectable: { type: Boolean, default: undefined },\n} as const;\n\nexport type GanttChartProps = ExtractPropTypes<typeof ganttChartProps>;\n\nconst ganttChartEmits = {\n \"date-change\": (_task: GanttTask, _start: Date, _end: Date) => true,\n \"progress-change\": (_task: GanttTask, _progress: number) => true,\n \"dependency-create\": (_dep: GanttDependency) => true,\n \"dependency-remove\": (_dep: GanttDependency) => true,\n \"dependency-dblclick\": (_dep: GanttDependency) => true,\n \"task-click\": (_task: GanttTask) => true,\n \"group-toggle\": (_task: GanttTask, _collapsed: boolean) => true,\n \"context-menu\": (_task: GanttTask, _evt: PointerEvent) => true,\n \"task-create\": (_task: GanttTask) => true,\n \"column-resize\": (_columnId: string, _width: number) => true,\n \"column-reorder\": (_order: string[]) => true,\n \"task-reorder\": (\n _draggedTaskId: string,\n _targetTaskId: string,\n _position: \"before\" | \"after\" | \"inside\"\n ) => true,\n \"selection-change\": (_taskIds: string[]) => true,\n};\n\nexport const GanttChart = defineComponent({\n name: \"GanttChart\",\n props: ganttChartProps,\n emits: ganttChartEmits,\n setup(props, { emit, expose }) {\n const containerRef = ref<HTMLElement | null>(null);\n const noop = () => {};\n\n // See hasInitialListener's doc comment: these five only affect whether gantt-core wires\n // up the relevant DOM interaction at construction, and are captured once, up front.\n // onContextMenu is deliberately always wired (unlike the other five) so right-click\n // handling works out of the box even for consumers who haven't attached a listener.\n const wireTaskCreate = hasInitialListener(\"onTaskCreate\");\n const wireColumnResize = hasInitialListener(\"onColumnResize\");\n const wireColumnReorder = hasInitialListener(\"onColumnReorder\");\n const wireTaskReorder = hasInitialListener(\"onTaskReorder\");\n const wireDependencyDblClick = hasInitialListener(\"onDependencyDblClick\");\n\n // gantt-core invokes every one of these seven callbacks from a call site that ALSO\n // unconditionally emits the matching public event (\"date-change\", \"selection-change\", ...).\n // So none of them belong in `options` below — doing that would fire the Vue listener\n // twice per event, once here and once through the chart.on(...) subscription further down.\n // options only ever needs: (a) the six gate-a-DOM-feature callbacks, as stable no-ops/undefined\n // purely to control wiring, and (b) everything else, which is plain reactive config.\n const getOptions = (): GanttOptions => ({\n viewMode: props.viewMode,\n columns: props.columns,\n theme: props.theme,\n colorScheme: props.colorScheme,\n columnWidth: props.columnWidth,\n readonly: props.readonly,\n showProgress: props.showProgress,\n showDependencies: props.showDependencies,\n gridPanelWidth: props.gridPanelWidth,\n showCriticalPath: props.showCriticalPath,\n showBaseline: props.showBaseline,\n showDeadlines: props.showDeadlines,\n showAssigneeAvatars: props.showAssigneeAvatars,\n enableHistory: props.enableHistory,\n keyboardAccessible: props.keyboardAccessible,\n virtualScroll: props.virtualScroll,\n autoSchedule: props.autoSchedule,\n pagination: props.pagination,\n snapToUnit: props.snapToUnit,\n calendar: props.calendar,\n markers: props.markers,\n autoRollupProgress: props.autoRollupProgress,\n selectable: props.selectable,\n onContextMenu: noop,\n onTaskCreate: wireTaskCreate ? noop : undefined,\n onColumnResize: wireColumnResize ? noop : undefined,\n onColumnReorder: wireColumnReorder ? noop : undefined,\n onTaskReorder: wireTaskReorder ? noop : undefined,\n onDependencyDblClick: wireDependencyDblClick ? noop : undefined,\n });\n\n const { chart } = useGanttChart(\n containerRef,\n () => props.tasks,\n () => props.dependencies,\n getOptions\n );\n\n // getOptions() builds a fresh object every call, so this only re-syncs gantt-core's\n // options when one of the reactive prop values it reads actually changed.\n watch(getOptions, (options) => chart.value?.setOptions(options));\n\n // All real event dispatch goes through the chart's public emitter — set up once when the\n // instance appears. `emit` is stable for the component's lifetime, so (unlike the React\n // wrapper's ref-of-latest-callback dance) there's no need to guard against re-subscribing.\n watch(chart, (instance, _prev, onCleanup) => {\n if (!instance) return;\n instance.on(\"date-change\", handleDateChange);\n instance.on(\"progress-change\", handleProgressChange);\n instance.on(\"dependency-create\", handleDependencyCreate);\n instance.on(\"dependency-remove\", handleDependencyRemove);\n instance.on(\"dependency-dblclick\", handleDependencyDblClick);\n instance.on(\"task-click\", handleTaskClick);\n instance.on(\"group-toggle\", handleGroupToggle);\n instance.on(\"context-menu\", handleContextMenu);\n instance.on(\"task-create\", handleTaskCreate);\n instance.on(\"column-resize\", handleColumnResize);\n instance.on(\"column-reorder\", handleColumnReorder);\n instance.on(\"task-reorder\", handleTaskReorder);\n instance.on(\"selection-change\", handleSelectionChange);\n onCleanup(() => {\n instance.off(\"date-change\", handleDateChange);\n instance.off(\"progress-change\", handleProgressChange);\n instance.off(\"dependency-create\", handleDependencyCreate);\n instance.off(\"dependency-remove\", handleDependencyRemove);\n instance.off(\"dependency-dblclick\", handleDependencyDblClick);\n instance.off(\"task-click\", handleTaskClick);\n instance.off(\"group-toggle\", handleGroupToggle);\n instance.off(\"context-menu\", handleContextMenu);\n instance.off(\"task-create\", handleTaskCreate);\n instance.off(\"column-resize\", handleColumnResize);\n instance.off(\"column-reorder\", handleColumnReorder);\n instance.off(\"task-reorder\", handleTaskReorder);\n instance.off(\"selection-change\", handleSelectionChange);\n });\n }, { flush: \"sync\" }); // synchronous: chart.value is set inside useGanttChart's onMounted,\n // and listeners must be attached before that same tick's synchronous code (e.g. a ref call\n // right after mount) can trigger an event — Vue's default 'pre' flush would run this a tick late.\n\n function handleDateChange(p: { task: GanttTask; start: Date; end: Date }) {\n emit(\"date-change\", p.task, p.start, p.end);\n }\n function handleProgressChange(p: { task: GanttTask; progress: number }) {\n emit(\"progress-change\", p.task, p.progress);\n }\n function handleDependencyCreate(dep: GanttDependency) {\n emit(\"dependency-create\", dep);\n }\n function handleDependencyRemove(dep: GanttDependency) {\n emit(\"dependency-remove\", dep);\n }\n function handleDependencyDblClick(dep: GanttDependency) {\n emit(\"dependency-dblclick\", dep);\n }\n function handleTaskClick(p: { task: GanttTask }) {\n emit(\"task-click\", p.task);\n }\n function handleGroupToggle(p: { task: GanttTask; collapsed: boolean }) {\n emit(\"group-toggle\", p.task, p.collapsed);\n }\n function handleContextMenu(p: { task: GanttTask; evt: PointerEvent }) {\n emit(\"context-menu\", p.task, p.evt);\n }\n function handleTaskCreate(p: { task: GanttTask }) {\n emit(\"task-create\", p.task);\n }\n function handleColumnResize(p: { columnId: string; width: number }) {\n emit(\"column-resize\", p.columnId, p.width);\n }\n function handleColumnReorder(p: { order: string[] }) {\n emit(\"column-reorder\", p.order);\n }\n function handleTaskReorder(p: {\n draggedTaskId: string;\n targetTaskId: string;\n position: \"before\" | \"after\" | \"inside\";\n }) {\n emit(\"task-reorder\", p.draggedTaskId, p.targetTaskId, p.position);\n }\n function handleSelectionChange(p: { taskIds: string[] }) {\n emit(\"selection-change\", p.taskIds);\n }\n\n onBeforeUnmount(() => {\n containerRef.value = null;\n });\n\n const handle: GanttChartHandle = {\n undo: () => chart.value?.undo(),\n redo: () => chart.value?.redo(),\n canUndo: () => chart.value?.canUndo ?? false,\n canRedo: () => chart.value?.canRedo ?? false,\n expandAll: () => chart.value?.expandAll(),\n collapseAll: () => chart.value?.collapseAll(),\n toggleGroup: (taskId) => chart.value?.toggleGroup(taskId),\n removeDependency: (fromId, toId) => chart.value?.removeDependency(fromId, toId),\n updateDependency: (fromId, toId, partial) => chart.value?.updateDependency(fromId, toId, partial),\n updateTask: (id, partial) => chart.value?.updateTask(id, partial),\n setViewMode: (mode) => chart.value?.setViewMode(mode),\n fitToViewport: (containerWidthPx) => chart.value?.fitToViewport(containerWidthPx),\n scrollToToday: () => chart.value?.scrollToToday(),\n scrollToRangeStart: () => chart.value?.scrollToRangeStart(),\n scrollToRangeEnd: () => chart.value?.scrollToRangeEnd(),\n getPageCount: () => chart.value?.getPageCount() ?? 1,\n setPage: (page) => chart.value?.setPage(page),\n zoomIn: (factor) => chart.value?.zoomIn(factor),\n zoomOut: (factor) => chart.value?.zoomOut(factor),\n getZoomLevel: () => chart.value?.getZoomLevel() ?? 0,\n getResourceHistogram: (options) => chart.value?.getResourceHistogram(options) ?? [],\n getLeveledTasks: (options) => chart.value?.getLeveledTasks(options) ?? { tasks: [], shifted: [] },\n selectTask: (id, options) => chart.value?.selectTask(id, options),\n selectAllVisible: () => chart.value?.selectAllVisible(),\n clearSelection: () => chart.value?.clearSelection(),\n getSelectedTaskIds: () => chart.value?.getSelectedTaskIds() ?? [],\n bulkShiftDates: (deltaMs) => chart.value?.bulkShiftDates(deltaMs),\n bulkDelete: () => chart.value?.bulkDelete(),\n toSVGString: () => chart.value?.toSVGString() ?? \"\",\n toPNGDataURL: () => chart.value?.toPNGDataURL() ?? Promise.resolve(\"\"),\n toPNGDataURLs: (options) => chart.value?.toPNGDataURLs(options) ?? Promise.resolve([]),\n getRenderModel: () => chart.value?.getRenderModel() ?? EMPTY_RENDER_MODEL,\n getInstance: () => chart.value,\n };\n expose(handle);\n\n // A single root element: class/style attrs fall through onto it automatically.\n return () => h(\"div\", { ref: containerRef });\n },\n});\n\nexport default GanttChart;\n","import { onBeforeUnmount, onMounted, shallowRef, watch, type Ref, type ShallowRef } from \"vue\";\nimport { GanttChart as GanttCore } from \"@ganttloom/gantt-core\";\nimport type { GanttDependency, GanttOptions, GanttTask } from \"@ganttloom/gantt-core\";\n\nexport interface UseGanttChartResult {\n /** The underlying framework-agnostic GanttChart instance, or null before the mount effect runs. */\n chart: ShallowRef<GanttCore | null>;\n /** Reactive, subscribed to the core's \"history-change\" event. Only meaningful when `enableHistory` is set in options. */\n canUndo: Ref<boolean>;\n /** Reactive, subscribed to the core's \"history-change\" event. Only meaningful when `enableHistory` is set in options. */\n canRedo: Ref<boolean>;\n}\n\n/**\n * Lower-level escape hatch for consumers who want to own their own container element\n * and DOM tree instead of using the <GanttChart /> component. Constructs a\n * @ganttloom/gantt-core GanttChart instance against `containerRef.value` on mount,\n * keeps it in sync with the tasks/dependencies/options getters via setTasks / setDependencies /\n * setOptions (reference-equality checks only — return a new array/object to trigger a sync),\n * and destroys it on unmount.\n *\n * `getTasks`/`getDependencies`/`getOptions` are plain functions (not refs) so this composable\n * can track whatever reactive source each one reads — a prop, a ref, a computed — without\n * imposing a shape on the caller.\n */\nexport function useGanttChart(\n containerRef: Ref<HTMLElement | null>,\n getTasks: () => GanttTask[],\n getDependencies: () => GanttDependency[],\n getOptions: () => GanttOptions\n): UseGanttChartResult {\n const chart = shallowRef<GanttCore | null>(null);\n const canUndo = shallowRef(false);\n const canRedo = shallowRef(false);\n\n let onHistoryChange: ((state: { canUndo: boolean; canRedo: boolean }) => void) | undefined;\n\n onMounted(() => {\n const container = containerRef.value;\n if (!container) return;\n\n const instance = new GanttCore(container, getTasks(), getDependencies(), getOptions());\n chart.value = instance;\n canUndo.value = instance.canUndo;\n canRedo.value = instance.canRedo;\n\n onHistoryChange = (state) => {\n canUndo.value = state.canUndo;\n canRedo.value = state.canRedo;\n };\n instance.on(\"history-change\", onHistoryChange);\n });\n\n onBeforeUnmount(() => {\n const instance = chart.value;\n if (!instance) return;\n if (onHistoryChange) instance.off(\"history-change\", onHistoryChange);\n instance.destroy();\n chart.value = null;\n canUndo.value = false;\n canRedo.value = false;\n });\n\n // Non-immediate: the initial values were already passed to the constructor above,\n // so these only need to fire on subsequent changes.\n watch(getTasks, (tasks) => chart.value?.setTasks(tasks));\n watch(getDependencies, (deps) => chart.value?.setDependencies(deps));\n watch(getOptions, (options) => chart.value?.setOptions(options));\n\n return { chart, canUndo, canRedo };\n}\n","export { GanttChart, default } from \"./GanttChart\";\nexport type { GanttChartProps, GanttChartHandle } from \"./GanttChart\";\n\nexport { useGanttChart } from \"./useGanttChart\";\nexport type { UseGanttChartResult } from \"./useGanttChart\";\n\n// Re-exported so consumers never need to add @ganttloom/gantt-core as a direct\n// dependency just to reference its types.\nexport type {\n ViewMode,\n DependencyType,\n GanttDependency,\n GanttAssignee,\n GanttTask,\n GanttColumn,\n GanttTheme,\n GanttRenderRow,\n GanttRenderBar,\n GanttRenderLink,\n GanttRenderTick,\n GanttRenderModel,\n GanttOptions,\n GanttEventMap,\n WorkingCalendar,\n ConstraintType,\n ResourceHistogramOptions,\n ResourceLoadBucket,\n GanttMarker,\n GanttRenderMarker,\n FilterTasksOptions,\n FilterTasksResult,\n Density,\n ResourceLevelingOptions,\n ResourceLevelingResult,\n} from \"@ganttloom/gantt-core\";\n\nexport {\n computeWBSCodes,\n applyConstraint,\n isWorkingDay,\n isHoliday,\n isWithinWorkingHours,\n isWorkingTime,\n nextWorkingDay,\n previousWorkingDay,\n shiftToWorkingDay,\n shiftToWorkingTime,\n computeResourceHistogram,\n renderResourceHistogramSVG,\n filterTasks,\n colorByField,\n applyColorByField,\n DEFAULT_PALETTE,\n DENSITY_PRESETS,\n levelResources,\n} from \"@ganttloom/gantt-core\";\n"],"mappings":"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","names":["onBeforeUnmount","watch","watch","onBeforeUnmount"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ganttloom/gantt-vue",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Vue 3 wrapper for @ganttloom/gantt-core — fully customizable Gantt chart component.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"keywords": [
|
|
20
|
+
"gantt",
|
|
21
|
+
"vue",
|
|
22
|
+
"vue3",
|
|
23
|
+
"gantt-chart",
|
|
24
|
+
"scheduling",
|
|
25
|
+
"timeline"
|
|
26
|
+
],
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"author": "Santhoshkumar Hariharan",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/santhoshkumarhari/ganttLoom.git",
|
|
32
|
+
"directory": "packages/gantt-vue"
|
|
33
|
+
},
|
|
34
|
+
"homepage": "https://github.com/santhoshkumarhari/ganttLoom/tree/master/packages/gantt-vue#readme",
|
|
35
|
+
"bugs": "https://github.com/santhoshkumarhari/ganttLoom/issues",
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"vue": ">=3.3"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@ganttloom/gantt-core": "0.2.1"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"vue": "^3.5.13",
|
|
47
|
+
"@vue/test-utils": "^2.4.6",
|
|
48
|
+
"jsdom": "^25.0.1",
|
|
49
|
+
"tsup": "^8.3.5",
|
|
50
|
+
"typescript": "^5.7.2",
|
|
51
|
+
"vitest": "^2.1.8"
|
|
52
|
+
},
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "tsup src/index.ts --format esm,cjs --dts --sourcemap --clean",
|
|
55
|
+
"dev": "tsup src/index.ts --format esm,cjs --dts --watch",
|
|
56
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
57
|
+
"test": "vitest run"
|
|
58
|
+
}
|
|
59
|
+
}
|