SearchCtrlK

  • ↑↓navigate
  • ↵open
  • escclose

Can’t find it? Contact us

Gantt

A Gantt chart.

Q4 2026

  • Checkout v2, Sep 14, 2026 to Dec 11, 2026, 70% complete
  • Search revamp, Sep 7, 2026 to Nov 6, 2026, 85% complete, projected to finish Nov 25, 2026

Q1 2027

  • Design tokens, Dec 7, 2026 to Feb 19, 2027
  • Edge cache, No dates yet
Today: November 12, 2026
View code
tsx
<Gantt label="Roadmap" start="2026-09-01" end="2027-02-28" today="2026-11-12" labels={labels}>
	<Gantt.Group title="Q4 2026">
		<Gantt.Item name="Checkout v2" start="2026-09-14" end="2026-12-11" progress={0.7} />
		<Gantt.Item name="Search revamp" start="2026-09-07" end="2026-11-06" projectedEnd="2026-11-25" progress={0.85} />
	</Gantt.Group>
	<Gantt.Group title="Q1 2027">
		<Gantt.Item name="Design tokens" start="2026-12-07" end="2027-02-19" />
	</Gantt.Group>
</Gantt>

Demo apps

Whole pages built only from @sdxc/ui, each for an invented product with its own palette and type. They open in a new tab.

Every demo, landings and docs sites alike, is listed in the demo gallery.

Installation

An ordinary dependency: install it, import the theme once, and import the component where it is used.

Terminal
npm add @sdxc/ui remix
typescript
import "@sdxc/ui/theme.css";

Usage

typescript
import { Gantt } from "@sdxc/ui/app";

Renders the chart inside its own scrolling box: the list column stays put while the axis scrolls sideways, and the axis row stays put while the rows scroll. Size the box from outside (a block size, or a flex parent) for the rows to scroll inside it.

Composition

The parts the component publishes, each a static property of the host.

  • Gantt
  • Gantt.GroupOne group: a header row spanning list and axis, then its projects as a list, so a screen reader hears each group's name and count before its rows.
  • Gantt.ItemOne project: its name, glyph and details in the list column, and its bar on the axis, with the dates, progress and projection written out for a screen reader.

Props

Read from the component's own types, so every prop, every default and every allowed value is listed.

PropTypeRequiredDescription
labelstringYesThe chart's accessible name.
startstringYesThe first day on the axis, as YYYY-MM-DD.
endstringYesThe last day on the axis, as YYYY-MM-DD.
todaystringNoToday, as YYYY-MM-DD; draws the line when it falls on the axis.
localestringNoFormats the month and day labels. @default "en"
headerRemixNodeNoThe list column's heading row, such as Active and Closed tabs.
labelsLabelsYes
childrenRemixNodeYesGantt.Groups, in order.

Also accepts everything in Omit<TagProps<"div">, "children">.

Gantt.Group

PropTypeRequiredDescription
titleRemixNodeYesThe group's name, such as a quarter.
actionsRemixNodeNoControls at the group header's end, such as an "Add project" link.
childrenRemixNodeNoGantt.Items.

Also accepts everything in Omit<TagProps<"section">, "title" | "children">.

Gantt.Item

PropTypeRequiredDescription
namestringYes
hrefstringNoThe project's page; the name in the list and on the bar both link to it.
iconRemixNodeNoA 16px glyph before the name, in the list and on the bar.
metaRemixNodeNoTrailing details in the list row, such as the lead's avatar and a status.
startstringNoThe first day, as YYYY-MM-DD; an item without start and end has no bar.
endstringNoThe target day, as YYYY-MM-DD.
progressnumberNoHow much is done, from 0 to 1, drawn as the bar's fill.
projectedEndstringNoThe day the work is projected to finish; past end, a hatched tail runs to it.
trailingRemixNodeNoDrawn after the name on the bar, such as a burn-up sparkline.

Also accepts everything in Omit<TagProps<"li">, "children">.

Other components this module publishes.

  • ganttDay
@sdxc/ui

Can’t find it? Contact us