Gantt Overview
RevoGrid Gantt is an Enterprise plugin layered on top of the base grid. RevoGrid owns rendering, virtualization, editing, and keyboard interactions. Gantt adds task timeline projection, dependency links, scheduling rules, resources/assignments, critical path, baselines, and timeline tools.
Source code
import { defineCustomElements } from '@revolist/revogrid/loader';
defineCustomElements();
import {
defineGanttToolbar,
GanttPlugin,
} from '@revolist/revogrid-enterprise';
import { currentTheme } from '../composables/useRandomData';
import './gantt-task-editor-form.css';
import {
SHOWCASE_ASSIGNMENTS,
SHOWCASE_DEPENDENCIES,
SHOWCASE_RESOURCES,
SHOWCASE_TOOLBAR_COLUMNS,
STANDARD_CALENDAR,
} from './gantt-project-data';
import {
createInitialTaskSource,
TASK_EDITOR_COLUMNS,
TASK_EDITOR_DIALOG_CONFIG,
TASK_EDITOR_GANTT_CONFIG,
} from './GanttTaskEditorFormShared';
const { isDark } = currentTheme();
type TaskEditorGridElement = HTMLRevoGridElement & Record<string, any>;
function createElement<K extends keyof HTMLElementTagNameMap>(
tagName: K,
className?: string,
): HTMLElementTagNameMap[K] {
const element = document.createElement(tagName);
if (className) {
element.className = className;
}
return element;
}
export function load(parentSelector: string | Element) {
const parent = typeof parentSelector === 'string'
? document.querySelector(parentSelector)
: parentSelector;
if (!parent) {
return () => {};
}
const taskSource = createInitialTaskSource();
const root = createElement('section', 'gantt-task-editor-demo');
const toolbar = createElement('div', 'gantt-task-editor-toolbar');
const grid = document.createElement('revo-grid') as TaskEditorGridElement;
grid.className = 'gantt-task-editor-grid';
grid.theme = isDark() ? 'darkCompact' : 'compact';
grid.hideAttribution = true;
grid.plugins = [GanttPlugin as any];
grid.columns = TASK_EDITOR_COLUMNS;
grid.gantt = TASK_EDITOR_GANTT_CONFIG;
grid.ganttCalendars = [STANDARD_CALENDAR];
grid.ganttDependencies = SHOWCASE_DEPENDENCIES;
grid.ganttResources = SHOWCASE_RESOURCES;
grid.ganttAssignments = SHOWCASE_ASSIGNMENTS;
grid.ganttTaskEditorDialog = TASK_EDITOR_DIALOG_CONFIG;
root.appendChild(toolbar);
root.appendChild(grid);
parent.appendChild(root);
defineGanttToolbar(toolbar, {
grid,
columns: SHOWCASE_TOOLBAR_COLUMNS,
controls: {
export: false,
baseline: false,
},
});
grid.source = taskSource;
return () => {
root.remove();
};
}
import React, { useEffect, useMemo, useRef } from 'react';
import { RevoGrid } from '@revolist/react-datagrid';
import { defineGanttToolbar, GanttPlugin } from '@revolist/revogrid-enterprise';
import { currentTheme } from '../composables/useRandomData';
import {
SHOWCASE_ASSIGNMENTS,
SHOWCASE_DEPENDENCIES,
SHOWCASE_RESOURCES,
SHOWCASE_TOOLBAR_COLUMNS,
STANDARD_CALENDAR,
} from './gantt-project-data';
import {
createInitialTaskSource,
TASK_EDITOR_COLUMNS,
TASK_EDITOR_DIALOG_CONFIG,
TASK_EDITOR_GANTT_CONFIG,
} from './GanttTaskEditorFormShared';
import './gantt-task-editor-form.css';
const { isDark } = currentTheme();
export default function GanttTaskEditorForm() {
const gridRef = useRef<HTMLRevoGridElement>(null);
const toolbarRef = useRef<HTMLDivElement>(null);
const source = useMemo(() => createInitialTaskSource(), []);
const plugins = useMemo(() => [GanttPlugin], []);
const columns = useMemo(() => TASK_EDITOR_COLUMNS, []);
const gantt = useMemo(() => TASK_EDITOR_GANTT_CONFIG, []);
const calendars = useMemo(() => [STANDARD_CALENDAR], []);
const dependencies = useMemo(() => SHOWCASE_DEPENDENCIES, []);
const resources = useMemo(() => SHOWCASE_RESOURCES, []);
const assignments = useMemo(() => SHOWCASE_ASSIGNMENTS, []);
const taskEditorDialog = useMemo(() => TASK_EDITOR_DIALOG_CONFIG, []);
useEffect(() => {
const toolbar = toolbarRef.current;
const grid = gridRef.current;
if (!toolbar || !grid) {
return undefined;
}
defineGanttToolbar(toolbar, {
grid,
columns: SHOWCASE_TOOLBAR_COLUMNS,
controls: {
export: false,
baseline: false,
},
});
return () => {
toolbar.textContent = '';
};
}, []);
return (
<section className="gantt-task-editor-demo">
<div ref={toolbarRef} className="gantt-task-editor-toolbar" />
<RevoGrid
ref={gridRef}
className="gantt-task-editor-grid"
theme={isDark() ? 'darkCompact' : 'compact'}
hideAttribution
plugins={plugins}
source={source}
columns={columns}
gantt={gantt}
ganttCalendars={calendars}
ganttDependencies={dependencies}
ganttResources={resources}
ganttAssignments={assignments}
ganttTaskEditorDialog={taskEditorDialog}
/>
</section>
);
}
<template>
<section class="gantt-task-editor-demo">
<div ref="toolbarRef" class="gantt-task-editor-toolbar"></div>
<RevoGrid
ref="gridRef"
class="gantt-task-editor-grid"
hide-attribution
:theme="isDark ? 'darkCompact' : 'compact'"
:plugins="plugins"
:source="tasks"
:columns="columns"
:gantt.prop="ganttConfig"
:gantt-calendars.prop="calendars"
:gantt-dependencies.prop="dependencies"
:gantt-resources.prop="resources"
:gantt-assignments.prop="assignments"
:gantt-task-editor-dialog.prop="taskEditorDialog"
/>
</section>
</template>
<script setup lang="ts">
import { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';
import RevoGrid from '@revolist/vue3-datagrid';
import { defineGanttToolbar, GanttPlugin } from '@revolist/revogrid-enterprise';
import { currentThemeVue } from '../composables/useRandomData';
import {
SHOWCASE_ASSIGNMENTS,
SHOWCASE_DEPENDENCIES,
SHOWCASE_RESOURCES,
SHOWCASE_TOOLBAR_COLUMNS,
STANDARD_CALENDAR,
} from './gantt-project-data';
import {
createInitialTaskSource,
TASK_EDITOR_COLUMNS,
TASK_EDITOR_DIALOG_CONFIG,
TASK_EDITOR_GANTT_CONFIG,
} from './GanttTaskEditorFormShared';
import './gantt-task-editor-form.css';
const { isDark } = currentThemeVue();
const plugins = ref([GanttPlugin]);
const columns = ref(TASK_EDITOR_COLUMNS);
const tasks = ref(createInitialTaskSource());
const ganttConfig = ref(TASK_EDITOR_GANTT_CONFIG);
const calendars = ref([STANDARD_CALENDAR]);
const dependencies = ref(SHOWCASE_DEPENDENCIES);
const resources = ref(SHOWCASE_RESOURCES);
const assignments = ref(SHOWCASE_ASSIGNMENTS);
const taskEditorDialog = ref(TASK_EDITOR_DIALOG_CONFIG);
const gridRef = ref<InstanceType<typeof RevoGrid> | HTMLRevoGridElement | null>(null);
const toolbarRef = ref<HTMLElement | null>(null);
let toolbarMounted = false;
let toolbarFrame = 0;
function getGridEl(): HTMLRevoGridElement | null {
const refValue = gridRef.value as (InstanceType<typeof RevoGrid> & { $el?: HTMLRevoGridElement }) | HTMLRevoGridElement | null;
const candidate = (refValue && '$el' in refValue ? refValue.$el : refValue) ?? null;
return candidate instanceof HTMLElement && candidate.tagName.toLowerCase() === 'revo-grid'
? candidate as HTMLRevoGridElement
: null;
}
function mountToolbar() {
if (toolbarMounted) {
return;
}
const grid = getGridEl();
if (!toolbarRef.value || !grid) {
toolbarFrame = requestAnimationFrame(mountToolbar);
return;
}
toolbarMounted = true;
defineGanttToolbar(toolbarRef.value, {
grid,
columns: SHOWCASE_TOOLBAR_COLUMNS,
controls: {
export: false,
baseline: false,
},
});
}
onMounted(async () => {
await nextTick();
mountToolbar();
});
onBeforeUnmount(() => {
if (toolbarFrame) {
cancelAnimationFrame(toolbarFrame);
}
if (toolbarRef.value) {
toolbarRef.value.textContent = '';
}
});
</script>
import { AfterViewInit, Component, ElementRef, NO_ERRORS_SCHEMA, ViewChild, ViewEncapsulation } from '@angular/core';
import { RevoGrid } from '@revolist/angular-datagrid';
import { defineGanttToolbar, GanttPlugin } from '@revolist/revogrid-enterprise';
import { currentTheme } from '../composables/useRandomData';
import {
SHOWCASE_ASSIGNMENTS,
SHOWCASE_DEPENDENCIES,
SHOWCASE_RESOURCES,
SHOWCASE_TOOLBAR_COLUMNS,
STANDARD_CALENDAR,
} from './gantt-project-data';
import {
createInitialTaskSource,
TASK_EDITOR_COLUMNS,
TASK_EDITOR_DIALOG_CONFIG,
TASK_EDITOR_GANTT_CONFIG,
} from './GanttTaskEditorFormShared';
@Component({
selector: 'gantt-task-editor-form-grid',
standalone: true,
// Allows Angular demos to bind RevoGrid plugin props that are not wrapper inputs.
schemas: [NO_ERRORS_SCHEMA],
imports: [RevoGrid],
template: `
<section class="gantt-task-editor-demo">
<div #toolbar class="gantt-task-editor-toolbar"></div>
<revo-grid
#grid
class="gantt-task-editor-grid"
[theme]="theme"
[hideAttribution]="true"
[plugins]="plugins"
[source]="tasks"
[columns]="columns"
[gantt]="ganttConfig"
[ganttCalendars]="calendars"
[ganttDependencies]="dependencies"
[ganttResources]="resources"
[ganttAssignments]="assignments"
[ganttTaskEditorDialog]="taskEditorDialog"
></revo-grid>
</section>
`,
styleUrls: ['./gantt-task-editor-form.css'],
encapsulation: ViewEncapsulation.None,
})
export class GanttTaskEditorFormGridComponent implements AfterViewInit {
@ViewChild('grid', { read: ElementRef }) gridRef!: ElementRef<HTMLRevoGridElement>;
@ViewChild('toolbar', { read: ElementRef }) toolbarRef!: ElementRef<HTMLElement>;
theme = currentTheme().isDark() ? 'darkCompact' : 'compact';
plugins = [GanttPlugin];
columns = TASK_EDITOR_COLUMNS;
tasks = createInitialTaskSource();
ganttConfig = TASK_EDITOR_GANTT_CONFIG;
calendars = [STANDARD_CALENDAR];
dependencies = SHOWCASE_DEPENDENCIES;
resources = SHOWCASE_RESOURCES;
assignments = SHOWCASE_ASSIGNMENTS;
taskEditorDialog = TASK_EDITOR_DIALOG_CONFIG;
ngAfterViewInit(): void {
defineGanttToolbar(this.toolbarRef.nativeElement, {
grid: this.gridRef.nativeElement,
columns: SHOWCASE_TOOLBAR_COLUMNS,
controls: {
export: false,
baseline: false,
},
});
}
}
/**
* Shared project data for all Gantt documentation examples.
*
* This file is kept as the public import surface for existing demos. The
* actual constants are grouped by responsibility in the adjacent modules.
*/
export * from './gantt-project-base-data';
export * from './gantt-showcase-data';
export * from './gantt-showcase-columns';
This document crossmatches the desired Scheduler, Gantt, and shared planning-platform feature list against the current implementation in packages/enterprise/plugins/gantt.
Status:
Existing β- implemented now.Partial βοΈ- foundation exists, but product/API/UX work is still needed.Planned π§- roadmap item.
Gantt
Project planning with task hierarchy, dependencies, milestones, baselines, calendars, resources, and scheduling logic.
| Feature group | Feature | Status | Notes |
|---|---|---|---|
| Task model | Task tree / work breakdown structure | β | Tasks use parentId and wbsCode. |
| Task model | Summary tasks | β | Summary task type and parent rollups exist. |
| Task model | Regular tasks | β | Standard task type exists. |
| Task model | Milestones | β | Milestone task type exists. |
| Task model | Collapsible task groups | β | Tree plugin integration exists. |
| Task model | Parent-child rollups | β | Schedule and cost rollups exist. |
| Dependencies | Finish-to-Start | β | Supported dependency type. |
| Dependencies | Start-to-Start | β | Supported dependency type. |
| Dependencies | Finish-to-Finish | β | Supported dependency type. |
| Dependencies | Start-to-Finish | β | Supported dependency type. |
| Dependencies | Lead and lag time | β | Positive lag and negative lead are supported. |
| Dependencies | Dependency validation | β | Validation and diagnostics exist. |
| Dependencies | Move task dependencies | β | Dependency drag/link editing exists. |
| Dependencies | Hide dependency arrows | β | gantt.visuals.showDependencies = false hides dependency overlays without mutating ganttDependencies. |
| Scheduling | Auto-scheduling | β | Dependency-aware recalculation exists. |
| Scheduling | Manual scheduling | β | Manual tasks preserve authored dates and can warn. |
| Scheduling | Forward scheduling | β | Project-start scheduling exists. |
| Scheduling | Backward scheduling | β | Project-finish scheduling exists. |
| Scheduling | Task constraints | β | Start/finish no-earlier/no-later and must-start/must-finish constraints exist. |
| Scheduling | Deadline markers | β | Deadline fields and indicators exist. |
| Scheduling | Duration calculation | β | Calendar-aware duration logic exists. |
| Scheduling | Start / finish date calculation | β | Engine computes effective dates. |
| Scheduling | Task splitting | β | Split ranges affect date math and rendering. |
| Critical path | Critical path | β | Critical path calculation and highlighting exist. |
| Critical path | Total slack | β | totalSlackDays is projected. |
| Critical path | Free slack | π§ | Separate free-slack field is not implemented. |
| Baselines | Baselines | β | Baseline snapshots and baseline bars exist. |
| Baselines | Baseline variance | β | Start, finish, duration, and progress variance fields exist. |
| Progress | Percent complete | β | Progress field and editing exist. |
| Progress | Progress tracking | β | Actual dates, remaining duration, and progress-aware scheduling exist. |
| Calendars | Project calendar | β | Primary project calendar exists. |
| Calendars | Task calendar | β | Tasks reference calendars. |
| Calendars | Resource calendar | β | Resources reference calendars. |
| Calendars | Working / non-working days | β | Calendar working weekdays exist. |
| Calendars | Holidays | β | Calendar holidays exist. |
| Resources | Resource assignment | β | Assignment model exists. |
| Resources | Resource workload view | β | Resource planning mode exists. |
| Resources | Resource utilization | β | Load summaries and capacity display exist. |
| Resources | Over-allocation warnings | β | Resource allocation diagnostics exist. |
| Cost | Cost fields | β | Explicit and calculated costs exist. |
| Customization | Custom task fields | βοΈ | Rows can carry custom data; formal custom field schema is planned. |
| Customization | Custom columns | βοΈ | RevoGrid column foundation and packaged Gantt column presets exist; broader custom-column API is planned. |
| Editing | Inline grid editing | β | Grid edits patch task fields. |
| Editing | Drag task bars | β | Task bar drag exists. |
| Editing | Resize task bars | β | Task bar resize exists. |
| Editing | Progress drag/edit | β | Progress interaction exists. |
| Timeline | Zoom levels | β | Preset and custom zoom exist. |
| Timeline | Timeline markers | β | Time ranges, project line, today line, milestone lines, and task markers exist. |
| Timeline | Today line | β | Today line is supported. |
| Selection | Multi-selection | βοΈ | RevoGrid selection exists; multi-task Gantt operations are planned. |
| Keyboard | Keyboard navigation | βοΈ | RevoGrid foundation exists; Gantt-specific shortcuts are planned. |
| History | Undo / redo | β | Gantt history snapshots exist. |
| Import/export | Grid import / export | β | CSV export is available in RevoGrid core; Excel import/export is available in RevoGrid Pro, with Gantt toolbar action helpers. |
| Import/export | Gantt project import / export | β | Typed project snapshots include clone/export/parse JSON helpers, REST/GraphQL adapter examples, and a PostgreSQL persistence recipe; broader project-file adapters are planned. |
| Import/export | MS Project-style compatibility layer | π§ | π§. |
| Performance | Large project virtualization | βοΈ | RevoGrid virtualization exists; Gantt-specific server/window model is planned. |
| Performance | Server-side loading for enterprise datasets | π§ | Not implemented. |
Scheduler
Resource planning for teams, equipment, rooms, vehicles, and operations.
| Feature group | Feature | Status | Notes |
|---|---|---|---|
| Timeline views | Resource timeline view | β | Resource planning mode renders resource rows with load bars. |
| Timeline views | Hour / day / week / month / custom range views | β | Default timeline zoom levels include hour-day, day-week, week-month, month-quarter, quarter-year, year-quarter, and multi-year-quarter; minute-level presets remain advanced/explicit, and custom zoom levels are configurable. |
| Timeline views | Horizontal scheduling mode | β | Current resource planning and Gantt timeline are horizontal. |
| Timeline views | Vertical scheduling mode | π§ | Needs dedicated Scheduler layout. |
| Resource management | Resource scheduling | βοΈ | Resources, assignments, capacity, and calendars exist; dedicated events/bookings/jobs model is planned. |
| Resource management | Multi-resource assignment | β | Multiple resources can be assigned to a task. |
| Resource management | Resource grouping | π§ | Resource filtering exists, but grouping UI/API is planned. |
| Resource management | Nested resource trees | π§ | Needs resource hierarchy model/projection. |
| Event editing | Drag-and-drop event creation | βοΈ | Task drag-create exists; Scheduler event creation is planned. |
| Event editing | Drag-and-drop event moving | βοΈ | Task bar moving exists; Scheduler event moving is planned. |
| Event editing | Event resizing | βοΈ | Task resizing exists; Scheduler event resizing is planned. |
| Event editing | Event splitting | βοΈ | Task split ranges exist; Scheduler event split UX is planned. |
| Event editing | Event merging | π§ | Not implemented. |
| Event layout | Overlapping event layout | π§ | Needs Scheduler event layout engine. |
| Event layout | Stack / pack / overlap display modes | π§ | Needs configurable event display modes. |
| Editing modes | Read-only mode | β | gantt.readOnly blocks packaged task, dependency, and assignment mutation services. |
| Editing modes | Editable mode | βοΈ | Task editing exists; Scheduler event editing is planned. |
| Calendars | Custom working hours | βοΈ | Calendars support working days, holidays, hours/day, and intraday working-hour ranges through inline gantt.calendars or ganttCalendars for hour-mode Gantt shading/snapping. |
| Calendars | Non-working time highlighting | β | Timeline can shade non-working time. |
| Calendars | Timezone support | β | Project and calendars carry IANA time zones. |
| Recurrence | Recurring events | π§ | Not implemented. |
| Recurrence | Event exceptions | π§ | Not implemented. |
| Validation | Event validation hooks | βοΈ | Cancelable before-change hooks exist for tasks, dependencies, and assignments. Event-specific hooks are planned. |
| Validation | Conflict detection | βοΈ | Resource over-allocation and scheduling diagnostics exist; booking conflict rules are planned. |
| Validation | Capacity warnings | β | Resource planning supports capacity and over-allocation display. |
| Validation | Availability rules | βοΈ | Resource calendars exist; richer availability rules are planned. |
| Validation | Locked events | βοΈ | Gantt tasks support locked; Scheduler event locks remain planned. |
| Rendering | Custom event templates | βοΈ | Task renderer hooks exist; Scheduler event renderer API is planned. |
| Rendering | Custom resource rows | βοΈ | Resource row projection exists; public custom resource row API is planned. |
| Rendering | Custom timeline headers | β | Timeline zoom/header configuration exists. |
| Rendering | Tooltips and popovers | βοΈ | Task tooltip hook and Gantt task detail popover model exist; richer Scheduler popovers are planned. |
| Grid UX | Inline editing | β | Grid edits update task data. |
| Grid UX | Keyboard navigation | βοΈ | RevoGrid foundation exists; Scheduler-specific keyboard workflows are planned. |
| Grid UX | Copy / paste | βοΈ | RevoGrid foundation exists; Scheduler-specific behavior is planned. |
| Grid UX | Undo / redo | β | Gantt integrates with history snapshots. |
| Grid UX | Filtering and search | β | Tree-aware Gantt search exists. |
| Grid UX | Typed task-column filters | β | Built-in numeric task columns use number filters, and built-in date task columns use the date filter family while preserving explicit column overrides. |
| Performance | Virtual scrolling for large datasets | βοΈ | RevoGrid virtualization exists; Scheduler-specific data windowing is planned. |
| Performance | Lazy loading by date range | π§ | Not implemented. |
| Export | Excel export | β | Supported through RevoGrid Pro ExportExcelPlugin for grid data. Timeline-image/workbook specialization can be added later. |
| Export | Excel import | β | Supported through RevoGrid Pro ExportExcelPlugin; Gantt-specific project mapping can be added later. |
| Export | CSV export | β | Supported through RevoGrid core ExportFilePlugin when grid exporting is enabled. |
| Export | PDF export | βοΈ | Print-oriented reporting recipe exists; timeline/PDF layout export is not provided by the current grid export plugins. A combined PDF + Excel reporting recipe documents the recommended toolbar wiring. |
Shared RevoGrid Planning Platform
Built on the same high-performance grid engine and scheduling foundation.
| Feature group | Feature | Status | Notes |
|---|---|---|---|
| Data model | Tasks | β | TaskEntity. |
| Data model | Events | π§ | Scheduler event entity is planned. |
| Data model | Resources | β | ResourceEntity. |
| Data model | Assignments | β | AssignmentEntity. |
| Data model | Dependencies | β | DependencyEntity. |
| Data model | Calendars | β | CalendarEntity. |
| Data model | Baselines | β | BaselineSnapshot. |
| Data model | Time ranges | β | Timeline visual ranges exist. |
| Data model | Constraints | β | Task constraints exist. |
| Data model | Custom metadata | βοΈ | Tags/notes and row extensibility exist; typed metadata schema is planned. |
| Data model | Custom field schemas | π§ | Not implemented. |
| Data model | Typed data models | β | Typed config, entities, events, and projected rows exist. |
| Data model | Framework-agnostic core | β | Engine/projection/core are framework-independent TypeScript modules. |
| Scheduling engine | Calendar-aware date calculation | β | Implemented. |
| Scheduling engine | Dependency-aware recalculation | β | Implemented. |
| Scheduling engine | Forward scheduling | β | Implemented. |
| Scheduling engine | Backward scheduling | β | Implemented. |
| Scheduling engine | Manual vs automatic scheduling | β | Implemented. |
| Scheduling engine | Constraint handling | β | Implemented. |
| Scheduling engine | Critical path calculation | β | Implemented. |
| Scheduling engine | Resource conflict detection | β | Implemented as resource over-allocation diagnostics. |
| Scheduling engine | Configurable validation rules | βοΈ | Policy options and cancelable hooks exist; rule registry is planned. |
| Scheduling engine | Transaction-based updates | βοΈ | Mutation services exist; public transaction API is planned. |
| Scheduling engine | Batch recalculation | β | Engine recalculates resolved project snapshots. |
| Scheduling engine | Deterministic scheduling results | β | Implemented. |
| Grid foundation | RevoGrid-powered left-side grid | β | Gantt projects rows and columns into RevoGrid. |
| Grid foundation | Virtualized rows and columns | β | RevoGrid foundation. |
| Grid foundation | Frozen columns | β | RevoGrid/Pro foundation. |
| Grid foundation | Column grouping | β | RevoGrid foundation. |
| Grid foundation | Column resizing | β | RevoGrid foundation. |
| Grid foundation | Column reordering | β | RevoGrid foundation. |
| Grid foundation | Custom cell renderers | β | RevoGrid templates and Gantt bar hooks. |
| Grid foundation | Custom editors | βοΈ | RevoGrid editor foundation exists; Gantt editor forms are planned. |
| Grid foundation | Tree data | β | Tree plugin integration. |
| Grid foundation | Row grouping | βοΈ | RevoGrid/Pro foundation exists; Gantt-specific row grouping is planned. |
| Grid foundation | Sorting | βοΈ | RevoGrid foundation exists; scheduler-safe sorting policy is planned. |
| Grid foundation | Filtering | β | Gantt search and RevoGrid filtering foundation. |
| Grid foundation | Selection | β | RevoGrid foundation. |
| Grid foundation | Clipboard | β | RevoGrid/Pro foundation. |
| Grid foundation | Keyboard navigation | β | RevoGrid foundation. |
| Grid foundation | Theming | β | Gantt SCSS and RevoGrid theming foundation. |
| Grid foundation | Plugin architecture | β | Gantt composes feature tools and Pro plugins. |
| Enterprise performance | Virtual rendering | β | RevoGrid foundation. |
| Enterprise performance | Large dataset support | βοΈ | Rendering foundation exists; server/window data model is planned. |
| Enterprise performance | Lazy loading | π§ | Not implemented. |
| Enterprise performance | Date-range loading | π§ | Not implemented. |
| Enterprise performance | Viewport-aware loading | π§ | Not implemented. |
| Enterprise performance | Server-side data model | π§ | Not implemented. |
| Enterprise performance | Incremental updates | βοΈ | Local mutation services exist; remote incremental sync is planned. |
| Enterprise performance | Real-time updates | π§ | Not implemented. |
| Enterprise performance | Optimistic updates | π§ | Not implemented. |
| Enterprise performance | WebSocket-ready data flow | π§ | Not implemented. |
| Enterprise performance | Batched mutations | βοΈ | Controlled local mutations exist; explicit batch API is planned. |
| Enterprise performance | Minimal re-rendering | βοΈ | Grid sync update modes exist. |
| Framework support | React | β | Gantt demos/components exist. |
| Framework support | Vue | β | Gantt demos/components exist. |
| Framework support | Angular | β | Gantt demos/components exist. |
| Framework support | Svelte | βοΈ | Svelte usage example exists; packaged wrapper/API docs are planned. |
| Extensibility | Custom task renderer | β | Task bar color/content/tooltip hooks. |
| Extensibility | Custom event renderer | π§ | Requires Scheduler event model. |
| Extensibility | Custom dependency renderer | βοΈ | Dependency layer exists; public renderer hook is planned. |
| Extensibility | Custom tooltip renderer | β | Task tooltip hook and built-in tooltip field selection exist. |
| Extensibility | Custom editor forms | β | Task editor form schema, submit normalization helper, and packaged Preact row-context-menu dialog plugin exist; the packaged dialog edits task fields and resource assignments. |
| Extensibility | Custom validation | βοΈ | Cancelable before-change events and validation recipe examples exist; validation registry is planned. |
| Extensibility | Custom scheduling rules | π§ | π§. |
| Extensibility | Custom calendars | β | Calendar entities are configurable. |
| Extensibility | Custom export pipeline | βοΈ | Gantt Excel row mapping, toolbar export actions, print recipe, and combined PDF + Excel reporting recipe exist; full pipeline hooks are planned. |
| Extensibility | Custom context menu | β | Gantt enables row, column, and timeline context menus by default, prepends default actions through RevoGrid Pro ContextMenuPlugin, preserves custom menu items, and supports opt-out through gantt.contextMenu. |
| Extensibility | Plugin API | β | Gantt plugin and feature-tool architecture exist. |
| Extensibility | Event lifecycle hooks | β | Before-change and interaction events exist. |
| Extensibility | Typed API | β | Typed config/entities/events exist. |
| Collaboration | Optimistic editing | π§ | π§. |
| Collaboration | Conflict resolution hooks | π§ | π§. |
| Collaboration | Change history | β | History integration exists. |
| Collaboration | Audit log support | π§ | π§. |
| Collaboration | User presence markers | π§ | π§. |
| Collaboration | Comments on tasks/events | π§ | π§. |
| Collaboration | Locking / checkout mode | βοΈ | Gantt task locked prevents packaged task mutation paths; broader checkout workflows are planned. |
| Collaboration | Role-based editability | βοΈ | Role/permission helpers exist for before-change hooks; packaged policy wiring is planned. |
| Collaboration | Read-only views | β | gantt.readOnly blocks packaged task, dependency, and assignment mutations. |
| Collaboration | Approval workflow hooks | π§ | π§. |
| Export and integration | CSV export | β | RevoGrid core ExportFilePlugin exports visible grid data as CSV. |
| Export and integration | Excel export | β | RevoGrid Pro ExportExcelPlugin exports grid data to .xlsx. |
| Export and integration | Excel import | β | RevoGrid Pro ExportExcelPlugin imports .xlsx/.xls into the grid. |
| Export and integration | PDF export | βοΈ | Print-oriented reporting recipe exists; native PDF export is not implemented by core/Pro/Gantt export plugins. |
| Export and integration | PNG export | π§ | Not implemented by core/Pro/Gantt export plugins. |
| Export and integration | JSON import/export | β | Gantt core exports clone/export/parse helpers for typed project snapshots. |
| Export and integration | iCalendar support for Scheduler | π§ | π§. |
| Export and integration | MS Project-style import/export layer | π§ | π§. |
| Export and integration | REST API integration | βοΈ | Project snapshot REST adapter example exists; production backend templates are planned. |
| Export and integration | GraphQL integration | βοΈ | Project snapshot GraphQL adapter example exists; production backend templates are planned. |
| Export and integration | Server-side adapter examples | βοΈ | REST, GraphQL, and PostgreSQL/Supabase-style examples exist; Firebase and server-window examples are planned. |
| Export and integration | Supabase / Firebase / PostgreSQL examples | βοΈ | PostgreSQL SQL builders and Supabase-style adapter exist; Firebase example is planned. |
| Export and integration | Headless scheduling engine mode | βοΈ | Engine is framework-independent; public headless API/package is planned. |
Feature: Gantt Task Editor Dialog Plugin
Status: Existing β
The packaged task editor dialog provides an MS Project-style βTask Informationβ entry point without forcing application teams to build the popup UI from scratch. GanttPlugin installs GanttTaskEditorDialogPlugin by default for every Gantt instance; the plugin mounts a Preact <dialog> host beside the grid, prepends Edit... to the row context menu, renders the task editor schema from TASK_EDITOR_FIELD_SCHEMA, and normalizes submissions with normalizeTaskEditorSubmit().
Design notes:
- The plugin is still exported as a separate enterprise plugin for backwards compatibility, but
GanttPluginauto-installs it so teams do not need to register it manually for normal Gantt usage. - Row context menus get
Edit...from the task editor plugin andAddfrom the Gantt context-menu tool by default; both compose with custom row context-menu configuration instead of replacing application items. gantt.contextMenu = falseopts out of generated Gantt menu items;ganttTaskEditorDialog.contextMenucan independently disable or re-enable the packaged edit-task menu entry.- Double-clicking a Gantt task, milestone, or summary bar dispatches
gantt-task-edit, which opens the packaged editor whenGanttTaskEditorDialogPluginis installed. - Newly created tasks open in the editor by default after
gantt-task-created;ganttTaskEditorDialog.openOnCreate = falsekeeps creation silent for applications that want a custom follow-up flow. - The dialog is closed by default. Its CSS explicitly hides
dialog:not([open])so the browser default dialog box never occupies layout before a user opens it. - Default submit behavior applies task field patches through the Gantt runtime/provider edit path, not by replacing
grid.sourcedirectly. Applications can intercept throughganttTaskEditorDialog.onSubmit; returningfalseskips the default update. - History covers task editor task field patches, resource assignment changes, dependency tab changes, direct external
grid.sourceedits observed by Gantt, and toolbar-driven task/dependency/baseline changes. - Task resolution prefers Gantt task-bar
data-gantt-task-id, then focused row data, then row text fallback for framework/browser context-menu timing differences. - Read-only projects hide the context-menu item unless
ganttTaskEditorDialog.readOnlyoverrides the behavior.
Current Extra Strengths Beyond The Initial List
| Area | Feature | Status |
|---|---|---|
| Scheduling | Backward/project-finish scheduling | β |
| Scheduling | Resource leveling modes: off, warn, auto | β |
| Scheduling | Slack-bound resource leveling | β |
| Scheduling | Progress-aware remaining-duration scheduling | β |
| Scheduling | Fixed-duration, fixed-work, and fixed-units effort modes | β |
| Diagnostics | Scheduler warnings projected into row data | β |
| Diagnostics | Dependency validation summary helper | β |
| Diagnostics | Resource over-allocation summary helper | β |
| Dependencies | Predecessor/successor text parser and formatter | β |
| Timeline | Custom milestone flag lines | β |
| Timeline | Custom task marker hook | β |
| Timeline | Custom task bar color/content/tooltip hooks | β |
| Toolbar | Baseline capture, critical-path toggle, and timeline navigation actions | β |
| Rendering | Read-only and locked-task indicator metadata | β |
| Cost | Assignment-derived cost and parent cost rollups | β |
| History | Structural undo/redo for task hierarchy and dependencies | β |
| Search | Tree-aware search preserving ancestors and descendants | β |
Roadmap Summary
| Priority area | π§ work |
|---|---|
| Scheduler product layer | Event model, booking/job/shift terminology, dedicated views, recurrence, exceptions, vertical mode, event layout modes, Scheduler-specific renderers and validation. |
| Enterprise data | Lazy loading, date-range loading, viewport-aware loading, server-side model, real-time adapters, optimistic updates, WebSocket-ready data flow. |
| Collaboration | Presence, comments, audit logs, role-based editability, locking/check-out, conflict resolution, approval hooks. |
| Import/export | Native PDF/PNG export, iCalendar, MS Project-style compatibility layer. CSV export and Excel import/export already come from RevoGrid core/Pro; Gantt adds toolbar helpers, Excel row mapping, print recipe, and JSON project snapshot helpers. |
| Extensibility | Custom dependency renderer, editor forms, scheduling-rule registry, export pipeline. |
| Integrations | Firebase, production server-side templates, headless scheduling engine API/package, packaged Svelte docs/wrapper. REST, GraphQL, and PostgreSQL/Supabase-style examples now exist. |