Inspect an assembly
First cut · seconds
Sequence
0 to 60 seconds
Positions supplied clips within a declared duration, with contained horizontal scrolling, accessible selection, and optional seeking.
Assembly
0 to 60 seconds
First cut · seconds
Sequence
0 to 60 seconds
Three ways in. They share one source, so the pixels match whichever you pick.
npm install @noorddev/vlak-react
// once, next to your app's root
import "@noorddev/vlak-react/css";
import { ClipTimeline } from "@noorddev/vlak-react";Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/clip-timeline.
npx @noorddev/vlak-cli add clip-timeline
The StyleX leaf lands in components/vlak/, for your own compiler to own. See StyleX.
npx shadcn add https://vlak.dev/r/clip-timeline.json
The same registry item, installed by shadcn's CLI.
<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />
No React. Link vlak.css and use the markup and classes below.
import { ClipTimeline } from "@noorddev/vlak-react";
<ClipTimeline label="Assembly" duration={60} unit="seconds" tracks={[{ id: "video", label: "Video" }]} clips={[{ id: "opening", trackId: "video", label: "Opening", start: 6, duration: 18 }]} />Supplied clip positions, with separate reachable selection and seek controls.
| Prop | Type | Default | Description |
|---|---|---|---|
labelrequired | ReactNode | ||
tracksrequired | ClipTrack[] | ||
clipsrequired | TimelineClip[] | ||
durationrequired | number | ||
unitrequired | "seconds" | "frames" | ||
position | number | null | ||
selectedClipId | string | null | ||
onSeek | (position: number) => void | ||
onSelectClip | (id: string) => void | ||
disabled | boolean |
Also accepts HTMLAttributes<HTMLDivElement>.
| Keys | Does |
|---|---|
| Tab | Moves through the optional seek control, scrollable track region, and selection buttons. |
| Arrow keys, Home, End | Uses native seeking on the range input; arrow keys scroll the focused track region. |
| Enter, Space | Requests selection from a focused clip button. |
<div class="rs-clip-timeline"><p class="rs-clip-timeline-label" id="assembly-label">Assembly</p><p class="rs-clip-timeline-note">0 to 60 seconds</p><div class="rs-clip-timeline-viewport" role="region" aria-labelledby="assembly-label" tabindex="0"><div class="rs-clip-timeline-track"><span>Video</span><div class="rs-clip-timeline-lane" aria-hidden="true"><span class="rs-clip-timeline-clip" style="inset-inline-start:10%;width:30%">Opening</span></div></div></div><ul class="rs-clip-timeline-rows"><li><span>Opening · Video · 6–24 seconds</span></li></ul></div>