import { Group, Stack, Text, Timeline, Tooltip } from "@mantine/core"; import { Check } from "lucide-react"; /** One stage of the last-mile delivery workflow. */ export interface LastMileStepState { label: string; done: boolean; active: boolean; /** Optional stamp/value shown next to the step (plate, time, distance…). */ detail?: string | null; } /** * Compact 6-dot progress bar for a table row — filled = done, ringed = current, * hollow = pending. Hover a dot for its label + stamp. */ export function LastMileStepBar({ steps }: { steps: LastMileStepState[] }) { return ( {steps.map((s, i) => { const color = s.done ? "var(--mantine-color-green-6)" : s.active ? "var(--mantine-color-blue-5)" : "var(--mantine-color-gray-4)"; return ( ); })} ); } /** * Vertical stepper for the detail view — completed steps bulleted + green, the * current step highlighted, each showing its stamp/value when known. */ export function LastMileStepper({ steps }: { steps: LastMileStepState[] }) { const activeIndex = steps.findIndex((s) => s.active); // Timeline highlights items with index < `active`; count of done steps drives it. const doneCount = steps.filter((s) => s.done).length; return ( {steps.map((s, i) => ( : undefined} title={ {s.label} } lineVariant={s.done ? "solid" : "dashed"} > {s.done ? "Done" : s.active ? "Current step" : "Pending"} {s.detail && ( {s.detail} )} ))} ); }