components/ui/timeline.tsx (51 lines of code) (raw):

type TimelineStepProps = { isActive: boolean; stepName: string; href: string; }; type TimelineProps = { active: string; isCompleted?: boolean; }; function TimelineStep({ isActive, stepName, href }: TimelineStepProps) { const activeColorStyle = isActive ? "border-blue-300 text-blue-500 visited:text-blue-500 hover:text-blue-600 hover:border-blue-600" : "border-slate-200 text-slate-500 visited:text-slate-500 hover:text-slate-600 hover:border-slate-500"; return ( <a href={"#" + href} className={ `no-underline text-sm border-2 px-2 rounded-full ` + activeColorStyle } > {stepName} </a> ); } export function Timeline({ active, isCompleted = false }: TimelineProps) { return ( <div className="flex flex-row items-center justify-center mt-2"> <TimelineStep isActive={active === "experiment"} stepName="Experiment" href={isCompleted ? "complete_experiments" : "live_experiments"} /> <hr className="border-1 w-4" /> <TimelineStep isActive={active === "rollout"} stepName="Rollout" href={isCompleted ? "complete_rollouts" : "live_rollouts"} /> {!isCompleted && ( <> <hr className="border-1 w-4" /> <TimelineStep isActive={active === "firefox"} stepName="Firefox" href="firefox" /> </> )} </div> ); }