Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Multi-Track Timeline Block for Svelte

A studio production tracker with six weeks as rows and four team lanes as columns, entries with a state and the work they wait on, and a toggle per lane that hides its column while the weeks stay.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Show several teams against one calendar with this multi-track timeline for Svelte with Ark UI. It is written for Laneworks, a fictional studio production tracker. A hairline frame with a plus mark on each corner holds a table: the six weeks of a site build run down the first column, with the week of 12 October marked Now, and four lanes (Design, Frontend, Backend, QA) run across. Each cell holds up to two entries with a glyph and a word for their state (done, in progress, not started), and an entry that depends on another lane says so in words, such as "needs Backend: Orders export". A button for each lane in a band above the table hides its column and the others reflow to fill the width while the week column stays, and the band counts, from the same data, how many entries wait on work that is not finished. The rows keep their height whichever lanes are shown, and at least one lane always stays. It is built from Guides and lucide icons, with native buttons and a native table, a CSS entrance and your theme's tokens for every colour. For studio and agency planning, release trains and any plan where several teams overlap. The entries are example data.

FAQ

How do I change the lanes and entries?

Edit LANES at the top of the file. Each lane has an id, a name and its entries; each entry has an id, a week from 1 to 6, a title, a state of done, doing or next and, when it waits on work in another lane, needs with that entry's id. The weeks come from WEEK_ONE, a Monday, so the dates and the Now mark are worked out for you, and the count of waiting entries is derived from the needs links and the states, so nothing is typed twice.

What happens when I hide a lane?

Its column leaves the table and the remaining columns share the width, while the week column and every row height stay as they were. The lane buttons are toggles that are pressed while their lane is shown. The last lane cannot be hidden: pressing it says so in the status line instead. Hiding is local state; reload and all four come back.

What does

An entry counts as waiting when its needs points at an entry that is not done yet. In the example three entries wait: Order history on the Orders export, Regression pass on the account pages and Launch check on Order history. The count follows the data if you change a state.

Is it accessible?

The grid is a real table with a caption, column headers and a row header for each week, and every entry is a list item whose state is written as a word beside its glyph, never colour alone. The lane buttons are named by their lane and report their pressed state, and a polite status line says which lane was hidden or shown and how many are visible.

How does it look on a phone?

The table scrolls sideways inside a named region the keyboard can reach, and the week column is held at the start so you always know which row you are reading. The lane buttons wrap above it.

What stays in the page, and how do I wire it to real work?

The shown lanes are local state and nothing is requested. To use real work items, pass your own lanes in the same shape and keep the helpers; they use no time library and no locale, so the server and every browser write the same dates.