Skip to content

Events & Hooks

Unified click & hover

HandlerDescription
onGanttClickClick on any timeline target
onGanttContextMenuRight-click; call preventDefault() to suppress browser menu
onGanttHoverHover on blocks, holidays, etc.

GanttTarget types

typeWhenKey fields
taskClick bar or milestonetask, rowIndex, element
baselineClick baseline markertask, rowIndex
blockDateClick blocked bandrange, index
holidayClick holiday banddate, label?
eventMarkerClick striplinemarker, index
draggableMarkerClick draggable markermarker, index
timelineClick empty areadate, rowIndex
tsx
<GanttChart
  blockDates={[{ start: '2026-04-14', end: '2026-04-16', label: 'Offsite' }]}
  onGanttContextMenu={(e) => {
    e.preventDefault();
    const { target } = e;
    if (target.type === 'task') openMenu(e.clientX, e.clientY, ['Edit', 'Delete'], target.task);
    if (target.type === 'timeline') openMenu(e.clientX, e.clientY, ['Add task'], target.date);
  }}
  onGanttHover={({ target, phase }) => {
    if (target?.type === 'blockDate' && phase === 'enter') showTip(target.range.label);
    if (phase === 'leave') hideTip();
  }}
/>

All event hooks

PropEventPayload highlights
onTaskClicktaskClicktask, modifiers
onTaskDoubleClicktaskDoubleClicktask, rowIndex
onGanttClickganttClickGanttPointerDetail
onGanttContextMenuganttContextMenuGanttPointerDetail
onGanttHoverganttHoverGanttHoverDetail
onTaskHovertaskHoverenter/leave only
onTaskDragStart/Drag/DragEnddrag lifecycletask, dates
onTaskResizeStart/Resize/ResizeEndresize lifecycletask, edge
onProgressChangeprogressChangetask, progress
onDraggableMarkerDragStart/Drag/DragEndmarker drag lifecyclemarker, date, optional snapPoint
onDraggableMarkerDragToSnapPointmarker snapped to custom pointsnapPoint, phase: 'drag' | 'end'
onZoomChangezoomChangescaleId, columnWidth
onScrollscrollscrollLeft, scrollTop
onSidebarLayoutChangelayoutSidebarLayoutState
onSelectionChangeselection{ selectedIds }
onTasksChangeFull GanttTask[] after edits

onTaskHover

Fires on enter and leave only — not on mousemove. Do not setState on every move from this hook.

See Advanced example and the GanttChart props reference.

Released under the MIT License.