Skip to content

Layout & Panels

PanelPropDefault contentResizer
LeftshowTaskList (default true)Task name column(s)divider-left
MiddleshowDateColumns (default true)Start / End columnsdivider-middle
RightalwaysSVG timeline + zoom toolbar

Vertical scroll is synchronized across panels (.rg-sync-scroll).

Panel sizing

PropDefaultDescription
defaultLeftWidth220Left panel width (px)
defaultMiddleWidth180Middle panel width (px)
minPanelWidth80Minimum when dragging dividers
height500Chart height
width'100%'Chart width
rowHeight36Task row height (px)

Hide panels: showTaskList={false}, showDateColumns={false}.

Layout callbacks

The root .rg-gantt element exposes layout as data attributes (px):

  • data-sidebar-left
  • data-sidebar-middle
  • data-timeline-left
tsx
<GanttChart
  onSidebarLayoutChange={({ leftWidth, middleWidth, rightWidth, timelineLeft, totalWidth }) => {
    // Sync external UI to panel positions
  }}
/>

useSidebarLayout

Build a custom shell outside GanttChart:

tsx
const { layout, leftWidth, middleWidth, timelineLeft, onDividerPointerDown, setLeftWidth, setMiddleWidth } =
  useSidebarLayout(containerRef, {
    defaultLeftWidth: 220,
    defaultMiddleWidth: 180,
    minPanelWidth: 80,
    onLayoutChange: (layout) => { /* ... */ },
  });

See Columns & Timezone for customizing panel columns.

Released under the MIT License.