import { TRACK_H } from "./timelineLayout"; import { TrackClipCount } from "./TrackClipCount"; // Layer row (diamond, name, then the ∿ disclosure on the right edge) — the // disclosure lives // here, not on the clip bar, and re-expands a collapsed layer. `∿` (not a // caret) because a group's own row keeps the caret for its structural // disclosure (member rows) — this button only ever means "show this row's // lanes", so it needs its own distinct glyph. /** * The `∿` that shows or hides a row's lanes. * * Shared, because two layouts need the identical control: the keyframe layer * row below, and the plain track header — an audio track with automation keeps * its own look (music glyph, indent) and gains this, rather than being * re-rendered as a keyframe layer to get at the button. */ export function LaneToggleButton({ name, isExpanded, lanesId, onToggle, }: { name: string; isExpanded: boolean; lanesId: string; onToggle: () => void; }) { return ( ); } export function LayerDisclosureRow({ name, clipCount, isExpanded, gutterBackground, columnWidth, lanesId, onToggleClipExpanded, children, }: { /** What this row is called. The active clip's own name when it is alone on the * track; the track itself once it holds several, since naming a shared row * after one of its clips reads as if the rows under it were that clip's. */ name: string; clipCount: number; isExpanded: boolean; gutterBackground: string; /** Same adaptive width the lane rows use: a narrowed header column must not * leave this row hanging over the clips it labels. */ columnWidth: number; /** Id of the CANVAS-side element holding the diamond lanes this row's caret * expands (see TimelinePropertyLanes). The caret also reveals the per-lane * control rows in this column, but the diamonds are what following the * reference should land on. */ lanesId: string; onToggleClipExpanded: () => void; /** Trailing controls that act on the LAYER (the visibility eye), not on a lane. */ children?: React.ReactNode; }) { return (