import type { ColumnsDefine, TYPES, ListTableConstructorOptions } from '@visactor/vtable'; import type { Group } from '@visactor/vtable/es/vrender'; import type { Gantt } from '../Gantt'; export type LayoutObjectId = number | string; import type { IGanttPlugin } from '../plugins/interface'; import type { IZoomScale } from './zoom-scale'; export interface ITimelineDateInfo { days: number; endDate: Date; startDate: Date; title: string; dateIndex: number; unit: 'year' | 'month' | 'quarter' | 'week' | 'day' | 'hour' | 'minute' | 'second'; step: number; } export interface ITimelineHeaderStyle { padding?: number | number[]; fontSize?: number; fontWeight?: string; color?: string; strokeColor?: string; textAlign?: 'center' | 'end' | 'left' | 'right' | 'start'; textOverflow?: string; textBaseline?: 'alphabetic' | 'bottom' | 'middle' | 'top'; textStick?: boolean; } export interface IGrid { backgroundColor?: string; horizontalBackgroundColor?: string[] | ((args: GridHorizontalLineStyleArgumentType) => string); verticalBackgroundColor?: string[] | ((args: GridVerticalLineStyleArgumentType) => string); weekendBackgroundColor?: string; verticalLine?: ILineStyle | ((args: GridVerticalLineStyleArgumentType) => ILineStyle); horizontalLine?: ILineStyle | ((args: GridHorizontalLineStyleArgumentType) => ILineStyle); verticalLineDependenceOnTimeScale?: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second'; } export interface GanttConstructorOptions { records?: any[]; taskListTable?: { tableWidth?: 'auto' | number; minTableWidth?: number; maxTableWidth?: number; } & Omit; timelineHeader: { backgroundColor?: string; colWidth?: number; hideWeekend?: boolean; weekendColWidth?: number | ((colWidth: number) => number); verticalLine?: ILineStyle; horizontalLine?: ILineStyle; zoomScale?: IZoomScale; scales: ITimelineScale[]; }; taskBar?: { startDateField?: string; endDateField?: string; progressField?: string; baselineStartDateField?: string; baselineEndDateField?: string; baselineStyle?: ITaskBarStyle | ((args: TaskBarInteractionArgumentType) => ITaskBarStyle); baselinePosition?: 'top' | 'bottom' | 'overlap'; labelText?: ITaskBarLabelText; labelTextStyle?: ITaskBarLabelTextStyle; barStyle?: ITaskBarStyle | ((args: TaskBarInteractionArgumentType) => ITaskBarStyle); milestoneStyle?: IMilestoneStyle; projectStyle?: ITaskBarStyle | ((args: TaskBarInteractionArgumentType) => ITaskBarStyle); customLayout?: ITaskBarCustomLayout; resizable?: boolean | [boolean, boolean] | ((interactionArgs: TaskBarInteractionArgumentType) => boolean | [boolean, boolean]); moveable?: boolean | ((interactionArgs: TaskBarInteractionArgumentType) => boolean); progressAdjustable?: boolean | ((interactionArgs: TaskBarInteractionArgumentType) => boolean); moveToExtendDateRange?: boolean; dragOrder?: boolean; hoverBarStyle?: ITaskBarHoverStyle; selectedBarStyle?: ITaskBarSelectedStyle; selectable?: boolean; clip?: boolean; menu?: { contextMenuItems?: TYPES.MenuListItem[] | ((record: string, index: number, dateIndex: number, startDate: Date, endDate: Date) => TYPES.MenuListItem[]); }; scheduleCreatable?: boolean | ((interactionArgs: TaskBarInteractionArgumentType) => boolean); locateIcon?: boolean; scheduleCreation?: { buttonStyle?: ILineStyle & { cornerRadius?: number; backgroundColor?: string; }; customLayout?: ITaskCreationCustomLayout; maxWidth?: number; minWidth?: number; }; }; taskKeyField?: string; dependency?: { links: ITaskLink[]; linkLineStyle?: ILineStyle; linkCreatable?: boolean; linkSelectable?: boolean; linkDeletable?: boolean; linkSelectedLineStyle?: ITaskLinkSelectedStyle; linkCreatePointStyle?: IPointStyle; linkCreatingPointStyle?: IPointStyle; linkCreatingLineStyle?: ILineStyle; distanceToTaskBar?: number; }; grid?: IGrid; frame?: { outerFrameStyle: IFrameStyle; verticalSplitLine?: ILineStyle; horizontalSplitLine?: ILineStyle; verticalSplitLineMoveable?: boolean; verticalSplitLineHighlight?: ILineStyle; }; markLine?: boolean | IMarkLine | IMarkLine[]; minDate?: string; maxDate?: string; headerRowHeight?: number; rowHeight?: number; rowSeriesNumber?: IRowSeriesNumber; overscrollBehavior?: 'auto' | 'none'; scrollStyle?: IScrollStyle; pixelRatio?: number; dateFormat?: 'yyyy-mm-dd' | 'dd-mm-yyyy' | 'mm/dd/yyyy' | 'yyyy/mm/dd' | 'dd/mm/yyyy' | 'yyyy.mm.dd' | 'dd.mm.yyyy' | 'mm.dd.yyyy'; underlayBackgroundColor?: string; groupBy?: true | string | string[]; tasksShowMode?: TasksShowMode; projectSubTasksExpandable?: boolean; eventOptions?: IEventOptions; keyboardOptions?: IKeyboardOptions; markLineCreateOptions?: IMarkLineCreateOptions; plugins?: IGanttPlugin[]; } export type ITaskBarLabelText = string; export interface ITimelineScale { rowHeight?: number; unit: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second'; step: number; startOfWeek?: 'sunday' | 'monday'; customLayout?: IDateCustomLayout; style?: ITimelineHeaderStyle; format?: (date: DateFormatArgumentType) => string; visible?: boolean; } export interface ITaskBarLabelTextStyle { fontFamily?: string; fontSize?: number; color?: string; outsideColor?: string; textAlign?: 'center' | 'end' | 'left' | 'right' | 'start'; textOverflow?: string; textBaseline?: 'alphabetic' | 'bottom' | 'middle' | 'top'; padding?: number | number[]; orient?: 'left' | 'top' | 'right' | 'bottom'; orientHandleWithOverflow?: 'left' | 'top' | 'right' | 'bottom'; } export interface ITaskBarStyle { barColor?: string; completedBarColor?: string; width?: number; cornerRadius?: number; borderWidth?: number; borderLineWidth?: number; borderColor?: string; minSize?: number; paddingTop?: number; } export interface IMilestoneStyle { borderColor?: string; borderLineWidth?: number; fillColor?: string; cornerRadius?: number; width?: number; labelText?: ITaskBarLabelText; labelTextStyle?: ITaskBarLabelTextStyle; textOrient?: 'left' | 'top' | 'right' | 'bottom'; } export type ILineStyle = { lineColor?: string; lineWidth?: number; lineDash?: number[]; }; export type IPointStyle = { strokeColor?: string; strokeWidth?: number; fillColor?: string; radius?: number; }; export interface IMarkLine { date: string; content?: string; contentStyle?: { color?: string; fontSize?: number; fontWeight?: string; lineHeight?: number; backgroundColor?: string; cornerRadius?: number | number[]; }; style?: ILineStyle; position?: 'left' | 'right' | 'middle' | 'date'; scrollToMarkLine?: boolean; } export type ITableColumnsDefine = ColumnsDefine; export type IFrameStyle = { borderColor?: string; borderLineWidth?: number | number[]; borderLineDash?: number[]; cornerRadius?: number; }; export type ITableStyle = TYPES.ThemeStyle; export type IRowSeriesNumber = TYPES.IRowSeriesNumber; export type IScrollStyle = TYPES.ScrollStyle; export type IEventOptions = TYPES.TableEventOptions; export interface IKeyboardOptions { deleteLinkOnDel?: boolean; deleteLinkOnBack?: boolean; } export type DateFormatArgumentType = { dateIndex: number; startDate: Date; endDate: Date; }; export type TaskBarInteractionArgumentType = { taskRecord: any; index: number; subIndex?: number; startDate: Date; endDate: Date; ganttInstance: Gantt; }; export type TaskBarCustomLayoutArgumentType = { width: number; height: number; index: number; startDate: Date; endDate: Date; taskDays: number; progress: number; taskRecord: any; ganttInstance: Gantt; }; export type ITaskBarCustomLayoutObj = { rootContainer?: Group; renderDefaultBar?: boolean; renderDefaultResizeIcon?: boolean; renderDefaultText?: boolean; }; export type ITaskBarCustomLayout = (args: TaskBarCustomLayoutArgumentType) => ITaskBarCustomLayoutObj; export type DateCustomLayoutArgumentType = { width: number; height: number; index: number; dateIndex: number; title: string; startDate: Date; endDate: Date; days: number; ganttInstance: Gantt; }; export type IDateCustomLayoutObj = { rootContainer: Group; renderDefaultText?: boolean; }; export type IDateCustomLayout = (args: DateCustomLayoutArgumentType) => IDateCustomLayoutObj; export type GridVerticalLineStyleArgumentType = { index: number; dateIndex: number; date?: Date; ganttInstance: Gantt; }; export type GridHorizontalLineStyleArgumentType = { index: number; ganttInstance: Gantt; }; export type TaskCreationCustomLayoutArgumentType = { width: number; height: number; ganttInstance: Gantt; }; export type ITaskCreationCustomLayoutObj = { rootContainer: Group; }; export type ITaskCreationCustomLayout = (args: TaskCreationCustomLayoutArgumentType) => ITaskCreationCustomLayoutObj; export type ITaskLink = { type: DependencyType; linkedFromTaskKey?: string | number | (string | number)[]; linkedToTaskKey?: string | number | (string | number)[]; linkLineStyle?: ILineStyle; }; export type ITaskLinkSelectedStyle = ILineStyle & { shadowBlur?: number; shadowOffset?: number; shadowColor?: string; }; export declare enum DependencyType { FinishToStart = "finish_to_start", StartToStart = "start_to_start", FinishToFinish = "finish_to_finish", StartToFinish = "start_to_finish" } export declare enum TasksShowMode { Tasks_Separate = "tasks_separate", Sub_Tasks_Inline = "sub_tasks_inline", Sub_Tasks_Separate = "sub_tasks_separate", Sub_Tasks_Arrange = "sub_tasks_arrange", Sub_Tasks_Compact = "sub_tasks_compact", Project_Sub_Tasks_Inline = "project_sub_tasks_inline" } export declare enum TaskType { TASK = "task", PROJECT = "project", MILESTONE = "milestone" } export type ITaskBarSelectedStyle = { shadowBlur?: number; shadowOffsetX?: number; shadowOffsetY?: number; shadowColor?: string; borderColor?: string; borderLineWidth?: number; }; export type ITaskBarHoverStyle = { cornerRadius?: number; barOverlayColor?: string; }; export type IMarkLineCreateOptions = { markLineCreatable: boolean; markLineCreationHoverToolTip?: { position?: 'top' | 'bottom'; tipContent?: string; style?: { contentStyle?: any; panelStyle?: any; }; }; markLineCreationStyle?: { fill?: string; size?: number; iconSize?: number; svg?: string; }; };