apexgantt 2.0.0 → 3.0.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/README.md +67 -2
- package/apexgantt.es.min.js +20829 -8854
- package/apexgantt.min.js +545 -588
- package/demo/gantt-with-interactions.html +5 -0
- package/demo/milestones.html +4 -16
- package/demo/multiple-gantts-in-shadow.html +378 -0
- package/index.d.ts +4 -0
- package/lib/gantt.d.ts +34 -11
- package/lib/models/Annotation.d.ts +4 -1
- package/lib/models/Bar.d.ts +5 -1
- package/lib/models/BarDragManager.d.ts +5 -1
- package/lib/models/BarResizeManager.d.ts +5 -1
- package/lib/models/DataManager.d.ts +4 -65
- package/lib/models/Dialog.d.ts +9 -1
- package/lib/models/Options.d.ts +7 -2
- package/lib/models/TaskForm.d.ts +7 -1
- package/lib/models/Tasks.d.ts +6 -2
- package/lib/models/Theme.d.ts +36 -0
- package/lib/models/TimeLine.d.ts +5 -1
- package/lib/styles/Dialog.style.d.ts +1 -1
- package/lib/styles/Dropdown.style.d.ts +1 -1
- package/lib/styles/Gantt.style.d.ts +1 -1
- package/lib/styles/Scrollbar.style.d.ts +1 -0
- package/lib/styles/TaskForm.style.d.ts +1 -1
- package/lib/styles/Tasks.style.d.ts +1 -1
- package/lib/styles/Timeline.style.d.ts +1 -1
- package/lib/styles/Toolbar.style.d.ts +1 -1
- package/lib/styles/Tooltip.style.d.ts +1 -1
- package/lib/types/events.d.ts +54 -0
- package/lib/util/arrow.util.d.ts +3 -1
- package/lib/util/bar.util.d.ts +7 -2
- package/lib/util/icon.util.d.ts +7 -0
- package/lib/util/style-injection.util.d.ts +9 -6
- package/lib/util/task.util.d.ts +7 -5
- package/package.json +2 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Task } from './Tasks';
|
|
2
|
+
import { ChartContext } from '../../../../graph-utils/src/index.ts';
|
|
2
3
|
import { Dayjs } from 'dayjs';
|
|
3
4
|
|
|
4
5
|
type Dependency = {
|
|
@@ -10,96 +11,34 @@ export declare class DataManager {
|
|
|
10
11
|
private dependencies;
|
|
11
12
|
private taskMap;
|
|
12
13
|
private taskTree;
|
|
14
|
+
private arrowLinkInstanceId;
|
|
13
15
|
constructor(tasks?: Task[]);
|
|
14
16
|
private buildTaskTree;
|
|
15
17
|
private processLevel;
|
|
16
|
-
/**
|
|
17
|
-
* Sort tasks recursively by a specified date field (start or end).
|
|
18
|
-
* @param field - The date field to sort by ('start' or 'end').
|
|
19
|
-
*/
|
|
20
18
|
private sortTasksByDate;
|
|
21
|
-
/**
|
|
22
|
-
* Validate a single task.
|
|
23
|
-
* @param task - Task to validate
|
|
24
|
-
* @returns - The validated task
|
|
25
|
-
*/
|
|
26
19
|
private validateTask;
|
|
27
|
-
/**
|
|
28
|
-
* Add a new dependency between tasks
|
|
29
|
-
*/
|
|
30
20
|
addDependency(fromId: string, toId: string, type?: Dependency['type']): void;
|
|
31
|
-
/**
|
|
32
|
-
* Add a new task to the list.
|
|
33
|
-
* @param task - Task to add
|
|
34
|
-
*/
|
|
35
21
|
addTask(task: Partial<Task>): void;
|
|
36
|
-
/**
|
|
37
|
-
* Calculate the overall progress of all tasks.
|
|
38
|
-
* @returns - Total progress percentage (0-100)
|
|
39
|
-
*/
|
|
40
22
|
calculateProgress(): number;
|
|
41
|
-
/**
|
|
42
|
-
* Get a date range from all tasks.
|
|
43
|
-
* @returns - The start and end date from all tasks
|
|
44
|
-
*/
|
|
45
23
|
getDateRange(add: number, viewMode: any): [Dayjs, Dayjs];
|
|
46
24
|
getFlatSortedTasks(tasks: Task[], getAll?: boolean): Task[];
|
|
47
25
|
getFlatTasks(): Task[];
|
|
48
26
|
getFlatVisibleTasks(): Task[];
|
|
49
27
|
getNestedChildTasks(taskId: string, visibleOnly?: boolean): Task[];
|
|
50
|
-
/**
|
|
51
|
-
* Get a task by ID.
|
|
52
|
-
* @param id - ID of the task
|
|
53
|
-
* @returns - The task or null if not found
|
|
54
|
-
*/
|
|
55
28
|
getTaskById(id: string): null | Task;
|
|
56
|
-
/**
|
|
57
|
-
* Get all dependencies for a task
|
|
58
|
-
* @param taskId - ID of the task
|
|
59
|
-
* @returns Object containing incoming and outgoing dependencies
|
|
60
|
-
*/
|
|
61
29
|
getTaskDependencies(taskId: string): {
|
|
62
30
|
incoming: Dependency[];
|
|
63
31
|
outgoing: Dependency[];
|
|
64
32
|
};
|
|
65
|
-
/**
|
|
66
|
-
* Get a all tasks.
|
|
67
|
-
* @returns - The all tasks
|
|
68
|
-
*/
|
|
69
33
|
getTasks(): Task[];
|
|
70
|
-
/**
|
|
71
|
-
* Get a all top parent tasks.
|
|
72
|
-
* @returns - The all tasks
|
|
73
|
-
*/
|
|
74
34
|
getTopParentTasks(): Task[];
|
|
75
35
|
hasChildren(id: string): boolean;
|
|
76
|
-
/**
|
|
77
|
-
* Remove a dependency
|
|
78
|
-
*/
|
|
79
36
|
removeDependency(fromId: string, toId: string): void;
|
|
80
|
-
/**
|
|
81
|
-
* Remove a task by ID.
|
|
82
|
-
* @param id - ID of the task to remove
|
|
83
|
-
*/
|
|
84
37
|
removeTask(id: string): void;
|
|
85
|
-
/**
|
|
86
|
-
* Validate and set the initial list of tasks.
|
|
87
|
-
* @param tasks - Array of tasks to initialize the DataManager
|
|
88
|
-
*/
|
|
89
38
|
setTasks(tasks: Task[]): void;
|
|
90
39
|
toggleTask(id: string): void;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
* @param taskId - ID of the task being moved
|
|
94
|
-
* @param dx - Change in x position
|
|
95
|
-
*/
|
|
96
|
-
updateDependencyArrows(taskId: string): void;
|
|
97
|
-
/**
|
|
98
|
-
* Update an existing task by ID.
|
|
99
|
-
* @param id - ID of the task to update
|
|
100
|
-
* @param updates - Partial task updates
|
|
101
|
-
*/
|
|
40
|
+
setArrowLinkInstanceId(instanceId: string): void;
|
|
41
|
+
updateDependencyArrows(taskId: string, chartContext?: ChartContext): void;
|
|
102
42
|
updateTask(id: string, updates: Partial<Task>): Task;
|
|
103
43
|
}
|
|
104
|
-
export declare const dataManager: DataManager;
|
|
105
44
|
export {};
|
package/lib/models/Dialog.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ChartContext } from '../../../../graph-utils/src/index.ts';
|
|
2
|
+
|
|
1
3
|
export interface DialogOptions {
|
|
2
4
|
closeOnClickOutside?: boolean;
|
|
3
5
|
closeOnEscape?: boolean;
|
|
@@ -7,16 +9,22 @@ export interface DialogOptions {
|
|
|
7
9
|
modal?: boolean;
|
|
8
10
|
title?: string;
|
|
9
11
|
width?: string;
|
|
12
|
+
positionRelativeToChart?: boolean;
|
|
10
13
|
}
|
|
11
14
|
export declare class Dialog {
|
|
15
|
+
private chartContext;
|
|
12
16
|
private options;
|
|
13
17
|
private container;
|
|
14
18
|
private overlay;
|
|
15
19
|
private keydownHandler;
|
|
16
20
|
private clickOutsideHandler;
|
|
17
|
-
constructor(options: DialogOptions);
|
|
21
|
+
constructor(chartContext: ChartContext, options: DialogOptions);
|
|
18
22
|
private createDialog;
|
|
19
23
|
private createDialogStructure;
|
|
24
|
+
/**
|
|
25
|
+
* Position dialog relative to the chart container
|
|
26
|
+
*/
|
|
27
|
+
private positionRelativeToChart;
|
|
20
28
|
private setupEventListeners;
|
|
21
29
|
private trapFocus;
|
|
22
30
|
private updateDialogContent;
|
package/lib/models/Options.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { ThemeMode } from './Theme';
|
|
1
2
|
import { Task } from './Tasks';
|
|
2
3
|
import { Annotation, Orientation } from './Annotation';
|
|
3
4
|
import { ViewMode } from '../util/gantt.util';
|
|
4
|
-
import { ArrowLink } from '../../../../graph-utils/src/index.ts';
|
|
5
5
|
|
|
6
6
|
export interface AnnotationOptions {
|
|
7
7
|
readonly annotationBgColor?: string;
|
|
@@ -15,6 +15,8 @@ export interface BorderOptions {
|
|
|
15
15
|
readonly cellBorderWidth: string;
|
|
16
16
|
}
|
|
17
17
|
export interface CommonOptions {
|
|
18
|
+
readonly backgroundColor: string;
|
|
19
|
+
readonly borderColor: string;
|
|
18
20
|
readonly canvasStyle: string;
|
|
19
21
|
readonly enableExport: boolean;
|
|
20
22
|
readonly enableResize: boolean;
|
|
@@ -60,6 +62,7 @@ export interface TooltipOptions {
|
|
|
60
62
|
}
|
|
61
63
|
export type GanttOptionsInternal = AnnotationOptions & BorderOptions & CommonOptions & FontOptions & GanttBarOptions & GanttData & GanttRowOptions & InteractiveOptions & TooltipOptions;
|
|
62
64
|
export interface GanttUserOptions {
|
|
65
|
+
readonly theme?: ThemeMode;
|
|
63
66
|
readonly annotationBgColor?: string;
|
|
64
67
|
readonly annotationBorderColor?: string;
|
|
65
68
|
readonly annotationBorderDashArray?: number[];
|
|
@@ -67,10 +70,12 @@ export interface GanttUserOptions {
|
|
|
67
70
|
readonly annotationOrientation?: Orientation;
|
|
68
71
|
readonly annotations?: Annotation[];
|
|
69
72
|
readonly arrowColor?: string;
|
|
73
|
+
readonly backgroundColor?: string;
|
|
70
74
|
readonly barBackgroundColor?: string;
|
|
71
75
|
readonly barBorderRadius?: string;
|
|
72
76
|
readonly barMargin?: number;
|
|
73
77
|
readonly barTextColor?: string;
|
|
78
|
+
readonly borderColor?: string;
|
|
74
79
|
readonly canvasStyle?: string;
|
|
75
80
|
readonly cellBorderColor?: string;
|
|
76
81
|
readonly cellBorderWidth?: string;
|
|
@@ -102,5 +107,5 @@ export type GanttOptions = GanttOptionsInternal;
|
|
|
102
107
|
export declare const ColumnWidthByMode: Record<ViewMode, number>;
|
|
103
108
|
export declare function getDaysInUnit(date: any, mode: any): number;
|
|
104
109
|
export declare const getPixelsPerDayForUnit: (unitStartDate: any, viewMode: any) => number;
|
|
105
|
-
export declare
|
|
110
|
+
export declare function getDefaultOptions(theme?: ThemeMode): GanttOptionsInternal;
|
|
106
111
|
export declare const DefaultOptions: GanttOptionsInternal;
|
package/lib/models/TaskForm.d.ts
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import { Task } from './Tasks';
|
|
2
|
+
import { DataManager } from './DataManager';
|
|
3
|
+
import { ChartContext } from '../../../../graph-utils/src/index.ts';
|
|
2
4
|
|
|
3
5
|
export declare class TaskForm {
|
|
6
|
+
private chartContext;
|
|
7
|
+
private dataManager;
|
|
4
8
|
private task;
|
|
9
|
+
private containerElement;
|
|
5
10
|
private onSubmit;
|
|
6
11
|
private dateFormat;
|
|
7
12
|
private errors;
|
|
8
13
|
private form;
|
|
9
14
|
private submitButton;
|
|
10
|
-
constructor(task: Task, onSubmit: (updatedTask: Partial<Task>) => void, dateFormat?: string);
|
|
15
|
+
constructor(chartContext: ChartContext, dataManager: DataManager, task: Task, containerElement: HTMLElement, onSubmit: (updatedTask: Partial<Task>) => void, dateFormat?: string);
|
|
16
|
+
private emitEvent;
|
|
11
17
|
private clearError;
|
|
12
18
|
private createForm;
|
|
13
19
|
private formatDate;
|
package/lib/models/Tasks.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { GanttOptions } from './Options';
|
|
2
|
+
import { DataManager } from './DataManager';
|
|
3
|
+
import { ChartContext } from '../../../../graph-utils/src/index.ts';
|
|
2
4
|
|
|
3
5
|
export declare enum TaskType {
|
|
4
6
|
Milestone = "milestone",
|
|
@@ -22,10 +24,12 @@ export interface Task {
|
|
|
22
24
|
}
|
|
23
25
|
export declare class Tasks {
|
|
24
26
|
options: GanttOptions;
|
|
25
|
-
|
|
27
|
+
chartContext: ChartContext;
|
|
28
|
+
dataManager: DataManager;
|
|
29
|
+
constructor(options: GanttOptions, chartContext: ChartContext, dataManager: DataManager);
|
|
26
30
|
generateBody(tasks: Task[], reRender: () => void): HTMLElement;
|
|
27
31
|
generateHeader(headerList: string[]): HTMLElement;
|
|
28
32
|
generateRow(task: Task, reRender: () => void): HTMLTableRowElement;
|
|
29
33
|
generateRows(tasks: Task[], tableBody: HTMLElement, reRender: () => void): HTMLElement;
|
|
30
|
-
render(reRender: () => void): HTMLElement;
|
|
34
|
+
render(reRender: () => void): HTMLElement[];
|
|
31
35
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export type ThemeMode = 'dark' | 'light';
|
|
2
|
+
export interface GanttTheme {
|
|
3
|
+
readonly tooltipBGColor: string;
|
|
4
|
+
readonly tooltipBorderColor: string;
|
|
5
|
+
readonly tooltipTextColor: string;
|
|
6
|
+
readonly cellBorderColor: string;
|
|
7
|
+
readonly rowBackgroundColors: readonly string[];
|
|
8
|
+
readonly headerBackground: string;
|
|
9
|
+
readonly headerTextColor: string;
|
|
10
|
+
readonly barBackgroundColor: string;
|
|
11
|
+
readonly barTextColor: string;
|
|
12
|
+
readonly arrowColor: string;
|
|
13
|
+
readonly backgroundColor: string;
|
|
14
|
+
readonly textColor: string;
|
|
15
|
+
readonly borderColor: string;
|
|
16
|
+
readonly annotationBgColor: string;
|
|
17
|
+
readonly annotationBorderColor: string;
|
|
18
|
+
readonly dialogBgColor: string;
|
|
19
|
+
readonly dialogBorderColor: string;
|
|
20
|
+
readonly buttonBgColor: string;
|
|
21
|
+
readonly buttonTextColor: string;
|
|
22
|
+
readonly buttonHoverBgColor: string;
|
|
23
|
+
readonly toolbarBgColor: string;
|
|
24
|
+
readonly toolbarBorderColor: string;
|
|
25
|
+
readonly toolbarHoverBgColor: string;
|
|
26
|
+
readonly scrollbarTrackColor: string;
|
|
27
|
+
readonly scrollbarThumbColor: string;
|
|
28
|
+
readonly scrollbarThumbHoverColor: string;
|
|
29
|
+
readonly splitBarColor: string;
|
|
30
|
+
readonly splitBarHoverColor: string;
|
|
31
|
+
readonly splitBarBorderColor: string;
|
|
32
|
+
readonly splitBarHandleColor: string;
|
|
33
|
+
}
|
|
34
|
+
export declare const LightTheme: GanttTheme;
|
|
35
|
+
export declare const DarkTheme: GanttTheme;
|
|
36
|
+
export declare function getTheme(mode: ThemeMode): GanttTheme;
|
package/lib/models/TimeLine.d.ts
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { Task } from './Tasks';
|
|
2
2
|
import { GanttOptions } from './Options';
|
|
3
|
+
import { DataManager } from './DataManager';
|
|
3
4
|
import { ViewMode } from '../util/gantt.util';
|
|
4
5
|
import { HeaderObject } from '../util/date.util';
|
|
5
6
|
import { Dayjs } from 'dayjs';
|
|
7
|
+
import { ChartContext } from '../../../../graph-utils/src/index.ts';
|
|
6
8
|
|
|
7
9
|
export declare class TimeLine {
|
|
8
10
|
viewMode: ViewMode;
|
|
9
11
|
options: GanttOptions;
|
|
10
|
-
|
|
12
|
+
chartContext: ChartContext;
|
|
13
|
+
dataManager: DataManager;
|
|
14
|
+
constructor(viewMode: ViewMode, options: GanttOptions, chartContext: ChartContext, dataManager: DataManager);
|
|
11
15
|
generateHeader(headerData: HeaderObject[], subHeader: null | string[]): HTMLElement;
|
|
12
16
|
generateRow(taskId: string, cellCount: number): HTMLElement;
|
|
13
17
|
generateRows(tasks: Task[], cellCount: number): HTMLElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const DialogStyle = "\n .gantt-dialog-container {\n position:
|
|
1
|
+
export declare const DialogStyle = "\n .gantt-dialog-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: none;\n z-index: 999;\n overflow: hidden;\n }\n\n .gantt-dialog-container .dialog-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n }\n\n .gantt-dialog-container .gantt-dialog {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: var(--dialog-bg-color, white);\n border-radius: 4px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n border: 1px solid var(--dialog-border-color, #eee);\n z-index: 1000;\n min-width: 300px;\n max-width: 90%;\n max-height: 90%;\n display: flex;\n flex-direction: column;\n }\n\n .gantt-dialog .dialog-header {\n padding: 12px 16px;\n border-bottom: 1px solid var(--dialog-border-color, #eee);\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--header-bg-color, #f3f3f3);\n flex-shrink: 0;\n }\n\n .gantt-dialog .dialog-title {\n font-weight: 600;\n font-size: 16px;\n color: var(--header-text-color, #333);\n margin: 0;\n }\n\n .gantt-dialog .dialog-close {\n background: none;\n border: none;\n font-size: 20px;\n cursor: pointer;\n padding: 0;\n color: var(--text-color, #666);\n transition: color 0.2s;\n line-height: 1;\n }\n\n .gantt-dialog .dialog-close:hover {\n color: var(--text-color, #333);\n }\n\n .gantt-dialog .dialog-content {\n padding: 16px;\n overflow-y: auto;\n overflow-x: hidden;\n flex: 1;\n background: var(--dialog-bg-color, white);\n color: var(--text-color, #333);\n }\n\n .gantt-dialog .dialog-content::-webkit-scrollbar {\n width: 8px;\n }\n\n .gantt-dialog .dialog-content::-webkit-scrollbar-track {\n background: var(--dialog-bg-color, #f1f1f1);\n }\n\n .gantt-dialog .dialog-content::-webkit-scrollbar-thumb {\n background: var(--border-color, #888);\n border-radius: 4px;\n }\n\n .gantt-dialog .dialog-content::-webkit-scrollbar-thumb:hover {\n background: var(--text-color, #555);\n }\n\n .gantt-dialog-container.show {\n display: block;\n }\n\n .gantt-dialog-container.animate .dialog-overlay {\n animation: fadeIn 0.2s ease-out;\n }\n\n .gantt-dialog-container.animate .gantt-dialog {\n animation: slideIn 0.3s ease-out;\n }\n\n @keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translate(-50%, -48%);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%);\n }\n }\n\n .gantt-container {\n position: relative;\n }\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const DropdownStyle = "\n .dropdown {\n position: relative;\n display: inline-block;\n }\n \n .dropdown-btn {\n padding: 8px 16px;\n background-color: #fff;\n color: rgba(0, 0, 0, 0.7);\n border: 1px solid #ddd;\n cursor: pointer;\n font-weight: bold;\n border-radius: 2px;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.5;\n transition: background-color 0.2s ease, border-color 0.2s ease;\n }\n \n .dropdown-btn:hover {\n background-color: #f8f9fa;\n border-color: #bbb;\n }\n \n .dropdown-btn:focus {\n outline: none;\n border-color: #0066cc;\n box-shadow: 0 0 0 2px rgba(0, 102, 204, 0.2);\n }\n \n .dropdown-content {\n display: none;\n position: absolute;\n background-color: #fff;\n min-width: 160px;\n box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n border-radius: 4px;\n right: 0;\n border: 1px solid #D9D9D9;\n overflow: hidden;\n }\n \n .dropdown-content a {\n color: #333;\n padding:
|
|
1
|
+
export declare const DropdownStyle = "\n .dropdown {\n position: relative;\n display: inline-block;\n }\n\n .dropdown .gantt-action-button {\n border-radius: 4px;\n }\n\n .dropdown.show .gantt-action-button {\n background: var(--toolbar-hover-bg-color, #f8f9fa);\n border-color: var(--button-bg-color, #0066cc);\n }\n \n .dropdown-btn {\n padding: 8px 16px;\n background-color: var(--toolbar-bg-color, #fff);\n color: var(--text-color, rgba(0, 0, 0, 0.7));\n border: 1px solid var(--toolbar-border-color, #ddd);\n cursor: pointer;\n font-weight: bold;\n border-radius: 2px;\n font-family: inherit;\n font-size: inherit;\n line-height: 1.5;\n transition: background-color 0.2s ease, border-color 0.2s ease;\n }\n \n .dropdown-btn:hover {\n background-color: var(--toolbar-hover-bg-color, #f8f9fa);\n border-color: var(--toolbar-border-color, #bbb);\n }\n \n .dropdown-btn:focus {\n outline: none;\n border-color: var(--button-bg-color, #0066cc);\n box-shadow: 0 0 0 2px rgba(0, 102, 204, 0.2);\n }\n \n .dropdown-content {\n display: none;\n position: absolute;\n background-color: var(--dialog-bg-color, #fff);\n min-width: 160px;\n box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n border-radius: 4px;\n right: 0;\n top: calc(100% + 4px);\n border: 1px solid var(--dialog-border-color, #D9D9D9);\n overflow: hidden;\n }\n \n .dropdown-content a {\n color: var(--text-color, #333);\n padding: 10px 14px;\n text-decoration: none;\n display: block;\n font-family: inherit;\n font-size: 13px;\n line-height: 1.4;\n transition: background-color 0.2s ease;\n cursor: pointer;\n }\n \n .dropdown-content a:hover {\n background-color: var(--toolbar-hover-bg-color, #f1f1f1);\n }\n \n .dropdown-content a:focus {\n background-color: var(--button-hover-bg-color, #e6f3ff);\n outline: none;\n }\n \n .dropdown.show .dropdown-content {\n display: block;\n animation: dropdownSlideDown 0.2s ease-out;\n }\n \n @keyframes dropdownSlideDown {\n from {\n opacity: 0;\n transform: translateY(-5px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n \n /* Shadow DOM specific adjustments */\n :host .dropdown {\n position: relative;\n display: inline-block;\n }\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const GanttStyle = "\n * {\n box-sizing: border-box;\n }\n\n .gantt-container * {\n user-select: none;\n }\n\n .gantt-actions-container {\n display: flex;\n align-items: center;\n gap: 10px;\n
|
|
1
|
+
export declare const GanttStyle = "\n * {\n box-sizing: border-box;\n }\n\n .gantt-container * {\n user-select: none;\n }\n\n .gantt-actions-container {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 6px 10px;\n flex: 0 0 36px;\n min-height: 36px;\n max-height: 36px;\n background-color: var(--background-color, #FFFFFF);\n border-bottom: 1px solid var(--border-color, #DFE0E1);\n }\n\n .gantt-action-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: 1px solid var(--toolbar-border-color, #D9D9D9);\n border-radius: 4px;\n background: var(--toolbar-bg-color, #fff);\n color: var(--text-color, #333);\n cursor: pointer;\n transition: all 0.15s ease;\n flex-shrink: 0;\n }\n\n .gantt-action-button:hover:not(:disabled) {\n background: var(--toolbar-hover-bg-color, #f8f9fa);\n border-color: var(--toolbar-border-color, #999);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\n }\n\n .gantt-action-button:active:not(:disabled) {\n transform: translateY(0);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n }\n\n .gantt-action-button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n background: var(--toolbar-bg-color, #fafafa);\n }\n\n .gantt-action-button svg {\n width: 16px;\n height: 16px;\n stroke: currentColor;\n flex-shrink: 0;\n }\n\n .gantt-action-separator {\n width: 1px;\n height: 20px;\n background-color: var(--border-color, #DFE0E1);\n margin: 0 4px;\n flex-shrink: 0;\n }\n\n .gantt-view-mode-display {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n height: 28px;\n font-size: 13px;\n color: var(--text-color, #666);\n background: var(--toolbar-bg-color, #f8f9fa);\n border-radius: 4px;\n margin-left: 4px;\n font-weight: 500;\n white-space: nowrap;\n flex-shrink: 0;\n }\n\n .gantt-view-mode-display svg {\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n }\n \n .gantt-container {\n display: flex;\n flex: 1 1 auto;\n min-height: 0;\n min-width: 0;\n border: 1px solid var(--border-color, #DFE0E1);\n border-top: none;\n position: relative;\n background-color: var(--background-color, #FFFFFF);\n overflow: hidden;\n }\n \n .gantt-button {\n border: 1px solid var(--toolbar-border-color, #D9D9D9);\n border-radius: 2px;\n background: var(--toolbar-bg-color, #fff);\n padding: 4px 12px;\n color: var(--text-color, rgba(0, 0, 0, 0.7));\n line-height: 20px;\n font-weight: bold;\n cursor: pointer;\n transition: background-color 0.2s ease;\n }\n\n .gantt-button:hover {\n background: var(--toolbar-hover-bg-color, #f8f9fa);\n }\n \n .gantt-button:disabled {\n color: rgba(128, 128, 128, 0.5);\n opacity: 0.6;\n }\n";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ScrollbarStyle = "\n .gantt-container ::-webkit-scrollbar {\n width: 12px;\n height: 12px;\n }\n\n .gantt-container ::-webkit-scrollbar-track {\n background: var(--scrollbar-track-color, #F5F5F5);\n border-radius: 4px;\n }\n\n .gantt-container ::-webkit-scrollbar-thumb {\n background: var(--scrollbar-thumb-color, #C1C1C1);\n border-radius: 4px;\n border: 2px solid var(--scrollbar-track-color, #F5F5F5);\n }\n\n .gantt-container ::-webkit-scrollbar-thumb:hover {\n background: var(--scrollbar-thumb-hover-color, #A8A8A8);\n }\n\n .gantt-container * {\n scrollbar-width: thin;\n scrollbar-color: var(--scrollbar-thumb-color, #C1C1C1) var(--scrollbar-track-color, #F5F5F5);\n }\n\n /* Shadow DOM support */\n :host .gantt-container ::-webkit-scrollbar {\n width: 12px;\n height: 12px;\n }\n\n :host .gantt-container ::-webkit-scrollbar-track {\n background: var(--scrollbar-track-color, #F5F5F5);\n border-radius: 4px;\n }\n\n :host .gantt-container ::-webkit-scrollbar-thumb {\n background: var(--scrollbar-thumb-color, #C1C1C1);\n border-radius: 4px;\n border: 2px solid var(--scrollbar-track-color, #F5F5F5);\n }\n\n :host .gantt-container ::-webkit-scrollbar-thumb:hover {\n background: var(--scrollbar-thumb-hover-color, #A8A8A8);\n }\n\n :host .gantt-container * {\n scrollbar-width: thin;\n scrollbar-color: var(--scrollbar-thumb-color, #C1C1C1) var(--scrollbar-track-color, #F5F5F5);\n }\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const TaskFormStyle = "\n\n .task-form .form-group {\n margin-bottom: 18px;\n position: relative;\n }\n\n .task-form label {\n display: block;\n margin-bottom: 5px;\n font-weight: 500;\n }\n\n .task-form input {\n width: 100%;\n padding: 8px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 14px;\n }\n\n .task-form input:focus {\n outline: none;\n border-color: #0066cc;\n }\n\n .task-form .grid {\n display: flex;\n justify-content: space-between;\n }\n\n .task-form .form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 24px;\n }\n\n .task-form .btn-primary {\n background: #0066cc;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n }\n\n .task-form .btn-primary:hover {\n background: #0052a3;\n }\n\n .task-form .btn-disabled,\n .task-form .btn-disabled:hover {\n background: #99c2ff;\n cursor: not-allowed;\n opacity: 0.7;\n }\n\n .task-form .form-error {\n position: absolute;\n bottom: -15px;\n left: 0;\n color: #dc3545;\n font-size: 12px;\n margin-top: 4px;\n line-height: 1.2;\n transition: opacity 0.2s ease;\n }\n\n .task-form .invalid {\n border-color: #dc3545;\n }\n\n .task-form .invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n }\n\n .color-picker-wrapper {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .color-picker-wrapper input[type=\"color\"] {\n -webkit-appearance: none;\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n }\n\n .color-picker-wrapper input[type=\"color\"]::-webkit-color-swatch-wrapper {\n padding: 0;\n }\n\n .color-picker-wrapper input[type=\"color\"]::-webkit-color-swatch {\n border: 1px solid #ddd;\n border-radius: 4px;\n }\n\n .color-picker-wrapper .color-preview {\n font-size: 12px;\n color: #666;\n }\n";
|
|
1
|
+
export declare const TaskFormStyle = "\n\n .task-form {\n overflow: visible;\n }\n\n .task-form .form-group {\n margin-bottom: 18px;\n position: relative;\n }\n\n /* extra padding to last form group for breathing room */\n .task-form .form-group:last-of-type {\n margin-bottom: 24px;\n }\n\n .task-form label {\n display: block;\n margin-bottom: 5px;\n font-weight: 500;\n color: var(--text-color, #333);\n }\n\n .task-form input {\n width: 100%;\n padding: 8px;\n border: 1px solid var(--dialog-border-color, #ddd);\n border-radius: 4px;\n font-size: 14px;\n background-color: var(--dialog-bg-color, #fff);\n color: var(--text-color, #333);\n }\n\n .task-form input:focus {\n outline: none;\n border-color: var(--button-bg-color, #0066cc);\n }\n\n .task-form .grid {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n }\n\n .task-form .grid .form-group {\n flex: 1;\n }\n\n .task-form .form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--dialog-border-color, #eee);\n position: sticky;\n bottom: -16px;\n background: var(--dialog-bg-color, white);\n margin-left: -16px;\n margin-right: -16px;\n margin-bottom: -16px;\n padding-left: 16px;\n padding-right: 16px;\n padding-bottom: 16px;\n }\n\n .task-form .btn-primary {\n background: var(--button-bg-color, #0066cc);\n color: var(--button-text-color, white);\n border: none;\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n font-weight: 500;\n }\n\n .task-form .btn-primary:hover {\n background: var(--button-hover-bg-color, #0052a3);\n }\n\n .task-form .btn-disabled,\n .task-form .btn-disabled:hover {\n background: #99c2ff;\n cursor: not-allowed;\n opacity: 0.7;\n }\n\n .task-form .form-error {\n position: absolute;\n bottom: -15px;\n left: 0;\n color: #dc3545;\n font-size: 12px;\n margin-top: 4px;\n line-height: 1.2;\n transition: opacity 0.2s ease;\n }\n\n .task-form .invalid {\n border-color: #dc3545;\n }\n\n .task-form .invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n }\n\n .color-picker-wrapper {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .color-picker-wrapper input[type=\"color\"] {\n -webkit-appearance: none;\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n }\n\n .color-picker-wrapper input[type=\"color\"]::-webkit-color-swatch-wrapper {\n padding: 0;\n }\n\n .color-picker-wrapper input[type=\"color\"]::-webkit-color-swatch {\n border: 1px solid var(--dialog-border-color, #ddd);\n border-radius: 4px;\n }\n\n .color-picker-wrapper .color-preview {\n font-size: 12px;\n color: var(--text-color, #666);\n }\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const TableStyle = "\n .tasks-table,\n .tasks-table th,\n .tasks-table td {\n border: var(--cell-border-width, 1px) solid var(--cell-border-color, #eff0f0);\n border-collapse: collapse;\n }\n\n .tasks-table th {\n height: 50px;\n }\n\n .tasks-table th,\n .tasks-table td {\n padding: 0 10px;\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .tasks-table .tasks-data-row .task-toggle-icon,\n .tasks-table .tasks-data-row .task-toggle-icon-blank {\n margin-right: 5px;\n width: 10px;\n }\n";
|
|
1
|
+
export declare const TableStyle = "\n .tasks-container {\n height: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .tasks-header-table {\n flex-shrink: 0;\n overflow-x: auto;\n overflow-y: hidden;\n display: block;\n background-color: var(--header-bg-color, #F3F3F3) !important;\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n\n .tasks-header-table::-webkit-scrollbar {\n display: none;\n height: 0;\n width: 0;\n }\n\n /* Shadow DOM specific - hiding */\n :host .tasks-header-table {\n scrollbar-width: none !important;\n -ms-overflow-style: none !important;\n }\n\n :host .tasks-header-table::-webkit-scrollbar {\n display: none !important;\n height: 0 !important;\n width: 0 !important;\n }\n\n .tasks-header-table thead {\n display: table;\n width: 100%;\n table-layout: fixed;\n }\n\n .tasks-body-wrapper {\n flex: 1;\n overflow: auto;\n position: relative;\n }\n\n .tasks-table {\n background-color: var(--background-color, #FFFFFF);\n width: 100%;\n table-layout: fixed;\n }\n\n .tasks-table,\n .tasks-table th,\n .tasks-table td {\n border: var(--cell-border-width, 1px) solid var(--cell-border-color, #eff0f0);\n border-collapse: collapse;\n }\n\n .tasks-table th {\n height: 50px;\n background-color: var(--header-bg-color, #F3F3F3);\n color: var(--header-text-color, #333);\n }\n\n .tasks-table th,\n .tasks-table td {\n padding: 0 10px;\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--text-color, #000);\n }\n\n .tasks-table .tasks-data-row .task-toggle-icon,\n .tasks-table .tasks-data-row .task-toggle-icon-blank {\n display: inline-block;\n margin-right: 5px;\n width: 10px;\n height: 10px;\n vertical-align: middle;\n }\n\n .tasks-table .tasks-data-row .task-toggle-icon {\n cursor: pointer;\n position: relative;\n }\n\n /* chevron (expanded) */\n .tasks-table .tasks-data-row .task-toggle-icon.expanded::before {\n content: '';\n position: absolute;\n width: 6px;\n height: 6px;\n border-right: 2px solid var(--text-color, #000000);\n border-bottom: 2px solid var(--text-color, #000000);\n transform: rotate(45deg);\n top: 0;\n left: 2px;\n }\n\n /* chevron - pointing right (collapsed) */\n .tasks-table .tasks-data-row .task-toggle-icon.collapsed::before {\n content: '';\n position: absolute;\n width: 6px;\n height: 6px;\n border-right: 2px solid var(--text-color, #000000);\n border-bottom: 2px solid var(--text-color, #000000);\n transform: rotate(-45deg);\n top: 2px;\n left: 0;\n }\n\n .tasks-table .tasks-data-row .task-toggle-icon:hover::before {\n opacity: 0.7;\n }\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const TimelineStyle = "\n .gantt-container .timeline-container {\n width: 100%;\n overflow-y: auto;\n position: relative;\n }\n\n .timeline-container .annotation {\n position: absolute;\n }\n\n .timeline-container .bar-timeline {\n position: absolute;\n cursor: move;\n cursor: grab;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .timeline-container .bar-timeline .bar-handle {\n height: 100%;\n width: 5px;\n position: absolute;\n z-index: 1000;\n background: transparent;\n }\n\n .timeline-container .bar-timeline .bar-handle:hover {\n cursor: col-resize;\n }\n\n .resizing {\n pointer-events: none;\n opacity: 0.8;\n }\n\n .timeline-container .bar-timeline .bar-handle.handle-left {\n left: -5px;\n }\n\n .timeline-container .bar-timeline .bar-handle.handle-right {\n right: -5px;\n }\n\n .timeline-container .bar-timeline.dragging {\n cursor: grabbing;\n }\n\n .bar-timeline .bar-timeline-progress {\n position: absolute;\n pointer-events: none;\n height: 100%;\n left: 0;\n }\n\n .bar-timeline .bar-label {\n white-space: nowrap;\n pointer-events: none;\n overflow: hidden;\n z-index: 1;\n }\n\n .timeline-container .timeline-
|
|
1
|
+
export declare const TimelineStyle = "\n .gantt-container .timeline-container {\n width: 100%;\n height: 100%;\n position: relative;\n background-color: var(--background-color, #FFFFFF);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .timeline-container .timeline-header {\n position: relative;\n z-index: 100;\n background-color: var(--header-bg-color, #F3F3F3);\n flex-shrink: 0;\n overflow-x: auto;\n overflow-y: hidden;\n width: 100%;\n scrollbar-width: none; \n -ms-overflow-style: none; \n }\n\n .timeline-container .timeline-header::-webkit-scrollbar {\n display: none;\n height: 0;\n width: 0;\n }\n\n /* Shadow DOM specific */\n :host .timeline-container .timeline-header {\n scrollbar-width: none !important;\n -ms-overflow-style: none !important;\n }\n\n :host .timeline-container .timeline-header::-webkit-scrollbar {\n display: none !important;\n height: 0 !important;\n width: 0 !important;\n }\n\n .timeline-container .timeline-header > .timeline-header-row {\n width: max-content;\n position: relative;\n }\n\n .timeline-container .timeline-body-wrapper {\n flex: 1;\n overflow: auto;\n position: relative;\n width: 100%;\n }\n\n .timeline-container .annotation,\n .timeline-container .annotation-container {\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n\n .timeline-container .annotation-container > * {\n pointer-events: auto;\n }\n\n .timeline-container .bar-container {\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n\n .timeline-container .bar-container > * {\n pointer-events: auto;\n }\n\n .timeline-container .bar-timeline {\n position: absolute;\n cursor: move;\n cursor: grab;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .timeline-container .bar-timeline .bar-handle {\n height: 100%;\n width: 5px;\n position: absolute;\n z-index: 1000;\n background: transparent;\n }\n\n .timeline-container .bar-timeline .bar-handle:hover {\n cursor: col-resize;\n }\n\n .resizing {\n pointer-events: none;\n opacity: 0.8;\n }\n\n .timeline-container .bar-timeline .bar-handle.handle-left {\n left: -5px;\n }\n\n .timeline-container .bar-timeline .bar-handle.handle-right {\n right: -5px;\n }\n\n .timeline-container .bar-timeline.dragging {\n cursor: grabbing;\n }\n\n .bar-timeline .bar-timeline-progress {\n position: absolute;\n pointer-events: none;\n height: 100%;\n left: 0;\n }\n\n .bar-timeline .bar-label {\n white-space: nowrap;\n pointer-events: none;\n overflow: hidden;\n z-index: 1;\n }\n\n .timeline-container .timeline-body {\n width: max-content;\n position: relative;\n }\n \n .timeline-container .timeline-header-row,\n .timeline-container .timeline-data-row {\n display: flex;\n }\n\n .timeline-container .timeline-header-cell,\n .timeline-container .timeline-data-cell {\n padding: 0 10px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n align-items: center;\n justify-content: center;\n border: var(--cell-border-width, 1px) solid var(--cell-border-color, #eff0f0);\n color: var(--text-color, #000);\n }\n\n .timeline-container .timeline-header-cell {\n background-color: var(--header-bg-color, #F3F3F3);\n color: var(--header-text-color, #333);\n }\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const ToolbarStyle = "\n #toolbar {\n display: flex;\n gap: 5px;\n position: absolute;\n right: 10px;\n top: 10px;\n z-index: 100;\n }\n \n .toolbar-item {\n align-items: center;\n background-color: #FFFFFF;\n border: 1px solid #BCBCBC;\n cursor: pointer;\n display: flex;\n height: 30px;\n justify-content: center;\n width: 30px;\n border-radius: 3px;\n transition: all 0.2s ease;\n position: relative;\n }\n \n .toolbar-item:hover {\n background-color: #f8f9fa;\n border-color: #999;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n \n .toolbar-item:active {\n transform: translateY(0);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n }\n \n .toolbar-item:focus {\n outline: none;\n border-color: #0066cc;\n box-shadow: 0 0 0 2px rgba(0, 102, 204, 0.2);\n }\n \n .toolbar-item img {\n width: 16px;\n height: 16px;\n pointer-events: none;\n }\n \n .toolbar-item[disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n }\n \n /* Tooltip styles */\n .toolbar-item::after {\n content: attr(data-tooltip);\n position: absolute;\n bottom: -35px;\n left: 50%;\n transform: translateX(-50%);\n background: #333;\n color: white;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n white-space: nowrap;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease;\n z-index: 1000;\n }\n \n .toolbar-item::before {\n content: '';\n position: absolute;\n bottom: -25px;\n left: 50%;\n transform: translateX(-50%);\n border: 5px solid transparent;\n border-bottom-color: #333;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease;\n z-index: 1000;\n }\n \n .toolbar-item:hover::after,\n .toolbar-item:hover::before {\n opacity: 1;\n }\n \n /* Shadow DOM specific adjustments */\n :host #toolbar {\n display: flex;\n gap: 5px;\n position: absolute;\n right: 10px;\n top: 10px;\n z-index: 100;\n }\n";
|
|
1
|
+
export declare const ToolbarStyle = "\n #toolbar {\n display: flex;\n gap: 5px;\n position: absolute;\n right: 10px;\n top: 10px;\n z-index: 100;\n }\n \n .toolbar-item {\n align-items: center;\n background-color: var(--toolbar-bg-color, #FFFFFF);\n border: 1px solid var(--toolbar-border-color, #BCBCBC);\n cursor: pointer;\n display: flex;\n height: 30px;\n justify-content: center;\n width: 30px;\n border-radius: 3px;\n transition: all 0.2s ease;\n position: relative;\n }\n \n .toolbar-item:hover {\n background-color: var(--toolbar-hover-bg-color, #f8f9fa);\n border-color: var(--toolbar-border-color, #999);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n \n .toolbar-item:active {\n transform: translateY(0);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n }\n \n .toolbar-item:focus {\n outline: none;\n border-color: var(--button-bg-color, #0066cc);\n box-shadow: 0 0 0 2px rgba(0, 102, 204, 0.2);\n }\n \n .toolbar-item img {\n width: 16px;\n height: 16px;\n pointer-events: none;\n filter: var(--toolbar-icon-filter, none);\n }\n \n .toolbar-item[disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n }\n \n /* Tooltip styles */\n .toolbar-item::after {\n content: attr(data-tooltip);\n position: absolute;\n bottom: -35px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--tooltip-bg-color, #333);\n color: var(--tooltip-text-color, white);\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n white-space: nowrap;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease;\n z-index: 1000;\n }\n \n .toolbar-item::before {\n content: '';\n position: absolute;\n bottom: -25px;\n left: 50%;\n transform: translateX(-50%);\n border: 5px solid transparent;\n border-bottom-color: var(--tooltip-bg-color, #333);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease;\n z-index: 1000;\n }\n \n .toolbar-item:hover::after,\n .toolbar-item:hover::before {\n opacity: 1;\n }\n \n /* Shadow DOM specific adjustments */\n :host #toolbar {\n display: flex;\n gap: 5px;\n position: absolute;\n right: 10px;\n top: 10px;\n z-index: 100;\n }\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const TooltipStyle = "\n #apexgantt-tooltip-container,\n [role=\"tooltip\"] {\n position: absolute;\n z-index: 1000;\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s ease;\n font-family: inherit;\n font-size: 13px;\n line-height: 1.4;\n display: none;\n width: 300px !important;\n max-width: 300px !important;\n box-sizing: border-box;\n }\n \n #apexgantt-tooltip-container.visible,\n [role=\"tooltip\"].visible {\n display: block;\n opacity: 1;\n visibility: visible;\n }\n \n #apexgantt-tooltip-container .tooltip-content,\n [role=\"tooltip\"] .tooltip-content {\n
|
|
1
|
+
export declare const TooltipStyle = "\n #apexgantt-tooltip-container,\n [role=\"tooltip\"] {\n position: absolute;\n z-index: 1000;\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s ease;\n font-family: inherit;\n font-size: 13px;\n line-height: 1.4;\n display: none;\n width: 300px !important;\n max-width: 300px !important;\n box-sizing: border-box;\n }\n \n #apexgantt-tooltip-container.visible,\n [role=\"tooltip\"].visible {\n display: block;\n opacity: 1;\n visibility: visible;\n }\n \n #apexgantt-tooltip-container .tooltip-content,\n [role=\"tooltip\"] .tooltip-content {\n padding: 12px 16px;\n border-radius: 6px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);\n width: 100%;\n word-wrap: break-word;\n overflow-wrap: break-word;\n box-sizing: border-box;\n display: block;\n border: 1px solid rgba(255, 255, 255, 0.1);\n }\n \n /* Shadow DOM specific adjustments */\n :host #apexgantt-tooltip-container,\n :host [role=\"tooltip\"] {\n position: absolute;\n z-index: 1000;\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s ease;\n font-family: inherit;\n font-size: 13px;\n line-height: 1.4;\n display: none;\n width: 300px !important;\n max-width: 300px !important;\n box-sizing: border-box;\n }\n \n :host #apexgantt-tooltip-container.visible,\n :host [role=\"tooltip\"].visible {\n display: block;\n opacity: 1;\n visibility: visible;\n }\n\n #apexgantt-tooltip-container .tooltip-content div,\n [role=\"tooltip\"] .tooltip-content div {\n margin: 6px 0;\n word-break: break-word;\n line-height: 1.4;\n }\n \n #apexgantt-tooltip-container .tooltip-content strong,\n [role=\"tooltip\"] .tooltip-content strong {\n font-weight: 600;\n display: inline;\n margin-right: 8px;\n }\n \n #apexgantt-tooltip-container .tooltip-content span,\n [role=\"tooltip\"] .tooltip-content span {\n display: inline;\n }\n \n /* First item (Name) styling */\n #apexgantt-tooltip-container .tooltip-content div:first-child,\n [role=\"tooltip\"] .tooltip-content div:first-child {\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n }\n \n #apexgantt-tooltip-container .tooltip-content div:first-child strong,\n [role=\"tooltip\"] .tooltip-content div:first-child strong {\n font-weight: 700;\n }\n \n #apexgantt-tooltip-container .tooltip-content div:last-child,\n [role=\"tooltip\"] .tooltip-content div:last-child {\n margin-bottom: 0;\n }\n";
|
package/lib/types/events.d.ts
CHANGED
|
@@ -1,9 +1,63 @@
|
|
|
1
|
+
import { Task } from '../models/Tasks';
|
|
2
|
+
|
|
1
3
|
export interface DependencyArrowUpdateDetail {
|
|
2
4
|
fromId: string;
|
|
3
5
|
toId: string;
|
|
4
6
|
type: 'FF' | 'FS' | 'SF' | 'SS';
|
|
7
|
+
chartInstanceId: string;
|
|
8
|
+
arrowLinkInstanceId?: string;
|
|
5
9
|
}
|
|
6
10
|
export interface DependencyArrowUpdateEvent extends CustomEvent {
|
|
7
11
|
detail: DependencyArrowUpdateDetail;
|
|
8
12
|
}
|
|
9
13
|
export declare function isDependencyArrowUpdateEvent(event: Event): event is DependencyArrowUpdateEvent;
|
|
14
|
+
export interface TaskUpdateEventDetail {
|
|
15
|
+
taskId: string;
|
|
16
|
+
updates: Partial<Task>;
|
|
17
|
+
updatedTask: Task;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
}
|
|
20
|
+
export interface TaskValidationErrorEventDetail {
|
|
21
|
+
taskId: string;
|
|
22
|
+
errors: Array<{
|
|
23
|
+
field: string;
|
|
24
|
+
message: string;
|
|
25
|
+
}>;
|
|
26
|
+
timestamp: number;
|
|
27
|
+
}
|
|
28
|
+
export interface TaskUpdateSuccessEventDetail {
|
|
29
|
+
taskId: string;
|
|
30
|
+
updatedTask: Task;
|
|
31
|
+
timestamp: number;
|
|
32
|
+
}
|
|
33
|
+
export interface TaskUpdateErrorEventDetail {
|
|
34
|
+
taskId: string;
|
|
35
|
+
error: Error;
|
|
36
|
+
timestamp: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* chart event names
|
|
40
|
+
* use these constants to attach event listeners like below
|
|
41
|
+
*
|
|
42
|
+
* element.addEventListener(GanttEvents.TASK_UPDATE, (e) => {
|
|
43
|
+
* console.log(e.detail);
|
|
44
|
+
* });
|
|
45
|
+
*/
|
|
46
|
+
export declare const GanttEvents: {
|
|
47
|
+
/**
|
|
48
|
+
* emits when a task is being updated (before completion)
|
|
49
|
+
*/
|
|
50
|
+
readonly TASK_UPDATE: "taskUpdate";
|
|
51
|
+
/**
|
|
52
|
+
* emits when form validation fails
|
|
53
|
+
*/
|
|
54
|
+
readonly TASK_VALIDATION_ERROR: "taskValidationError";
|
|
55
|
+
/**
|
|
56
|
+
* emits after a task update completes successfully
|
|
57
|
+
*/
|
|
58
|
+
readonly TASK_UPDATE_SUCCESS: "taskUpdateSuccess";
|
|
59
|
+
/**
|
|
60
|
+
* emits when a task update fails
|
|
61
|
+
*/
|
|
62
|
+
readonly TASK_UPDATE_ERROR: "taskUpdateError";
|
|
63
|
+
};
|
package/lib/util/arrow.util.d.ts
CHANGED
package/lib/util/bar.util.d.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { ChartContext } from '../../../../graph-utils/src/index.ts';
|
|
2
|
+
|
|
3
|
+
export declare function getBarElement(context: ChartContext, taskId: string): HTMLElement | null;
|
|
4
|
+
export declare function getBarRowElement(context: ChartContext, taskId: string): HTMLElement | null;
|
|
5
|
+
export declare function getTaskRowElement(context: ChartContext, taskId: string): HTMLElement | null;
|
|
6
|
+
export declare function updateColumnContent(context: ChartContext, taskId: string, columnKey: string, value: string): void;
|
|
7
|
+
export declare function setTaskRowBackgroundColor(context: ChartContext, taskId: string, bgColor: string): void;
|
|
@@ -1,21 +1,24 @@
|
|
|
1
|
+
import { ChartContext } from '../../../../graph-utils/src/index.ts';
|
|
2
|
+
|
|
1
3
|
export declare class StyleInjection {
|
|
2
4
|
private static injectedStyles;
|
|
3
5
|
/**
|
|
4
|
-
* Inject CSS styles into the correct context
|
|
6
|
+
* Inject CSS styles into the correct context using ChartContext
|
|
7
|
+
* @param chartContext - Chart context instance
|
|
5
8
|
* @param css - CSS string to inject
|
|
6
9
|
* @param id - Optional ID for the style element to prevent duplicates
|
|
7
10
|
*/
|
|
8
|
-
static injectStyles(css: string, id?: string): void;
|
|
11
|
+
static injectStyles(chartContext: ChartContext, css: string, id?: string): void;
|
|
9
12
|
/**
|
|
10
13
|
* Check if a style with given ID has been injected
|
|
11
14
|
*/
|
|
12
15
|
static hasStyle(id: string): boolean;
|
|
13
16
|
/**
|
|
14
|
-
* Remove a style by ID
|
|
17
|
+
* Remove a style by ID using ChartContext
|
|
15
18
|
*/
|
|
16
|
-
static removeStyle(id: string): void;
|
|
19
|
+
static removeStyle(chartContext: ChartContext, id: string): void;
|
|
17
20
|
/**
|
|
18
|
-
* Clear all injected styles
|
|
21
|
+
* Clear all injected styles using ChartContext
|
|
19
22
|
*/
|
|
20
|
-
static clearAll(): void;
|
|
23
|
+
static clearAll(chartContext: ChartContext): void;
|
|
21
24
|
}
|
package/lib/util/task.util.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ViewMode } from './gantt.util';
|
|
2
2
|
import { Task } from '../models/Tasks';
|
|
3
3
|
import { GanttOptions } from '../models/Options';
|
|
4
|
+
import { DataManager } from '../models/DataManager';
|
|
4
5
|
import { Dayjs } from 'dayjs';
|
|
6
|
+
import { ChartContext } from '../../../../graph-utils/src/index.ts';
|
|
5
7
|
|
|
6
8
|
export declare enum ColumnKey {
|
|
7
9
|
Duration = "duration",
|
|
@@ -23,15 +25,15 @@ export interface ColumnListItem {
|
|
|
23
25
|
}
|
|
24
26
|
export declare const ColumnList: ColumnListItem[];
|
|
25
27
|
export declare function getTaskTextByColumn(task: Task, columnKey: ColumnKey, inputDateFormat: string): string;
|
|
26
|
-
export declare function getTaskRowElement(taskId: string): HTMLElement | null;
|
|
27
|
-
export declare function updateColumnContent(taskId: string, columnKey: string, value: string): void;
|
|
28
|
+
export declare function getTaskRowElement(context: ChartContext, taskId: string): HTMLElement | null;
|
|
29
|
+
export declare function updateColumnContent(context: ChartContext, taskId: string, columnKey: string, value: string): void;
|
|
28
30
|
export declare function getRowBackgroundColor(index: number, rowBackgroundColors: readonly string[]): string;
|
|
29
|
-
export declare function setTaskRowBackgroundColor(taskId: string, bgColor: string): void;
|
|
31
|
+
export declare function setTaskRowBackgroundColor(context: ChartContext, taskId: string, bgColor: string): void;
|
|
30
32
|
interface TaskElements {
|
|
31
33
|
taskBar: HTMLElement | null;
|
|
32
34
|
taskBarRow: HTMLElement | null;
|
|
33
35
|
taskRow: HTMLElement | null;
|
|
34
36
|
}
|
|
35
|
-
export declare const getTaskElements: (taskId: string) => TaskElements;
|
|
36
|
-
export declare const updateTaskInUI: (taskId: string, updates: Partial<Task>, options: GanttOptions, viewMode: ViewMode, ganttStartDate: Dayjs) => void;
|
|
37
|
+
export declare const getTaskElements: (context: ChartContext, taskId: string) => TaskElements;
|
|
38
|
+
export declare const updateTaskInUI: (context: ChartContext, dataManager: DataManager, taskId: string, updates: Partial<Task>, options: GanttOptions, viewMode: ViewMode, ganttStartDate: Dayjs) => void;
|
|
37
39
|
export {};
|