import type { CommitGraphRow } from '../../utils/commitGraph'; import { laneColor } from '../../utils/commitGraph'; // Geometry: each lane is a fixed-width column; the commit dot sits at NODE_Y // inside a fixed-height top zone (matching the collapsed row header), and // plain rails continue below it so lines stretch through expanded content. const LANE_WIDTH = 12; const NODE_ZONE_HEIGHT = 56; const NODE_Y = 28; const NODE_RADIUS = 3.5; const STROKE_WIDTH = 2; const laneX = (lane: number) => lane * LANE_WIDTH + LANE_WIDTH / 2; type CommitGraphStripProps = { row: CommitGraphRow; }; export default function CommitGraphStrip({ row }: CommitGraphStripProps) { const width = row.laneCount * LANE_WIDTH; const nodeX = laneX(row.nodeLane); const nodeColor = laneColor(row.nodeLane); return (
{/* Lines passing straight through the row */} {row.passThrough.map((lane) => ( ))} {/* The node's own lane arriving from above / continuing below */} {row.hasTopContinuation && ( )} {row.hasParentContinuation && ( )} {/* Extra children merging into the node from the row above */} {row.inbound.map((lane) => ( ))} {/* Extra parents branching out of the node toward the row below */} {row.outbound.map((lane) => ( ))} {/* Commit dot — slightly larger for merge/fork points */} 0 || row.outbound.length > 0 ? NODE_RADIUS + 0.5 : NODE_RADIUS} fill={nodeColor} /> {/* Rails continuing below the node zone (through expanded content) */} {row.bottomLanes.map((lane) => (
))}
); }