Dashboards

Metric Rail

A compact metric strip for dashboard summaries and reports.

ReactavailableIntermediate
dashboardmetricsdata
Author: Prism Bits
Live React preview
Loading preview…
"use client";

type Metric = {
  label: string;
  value: string;
  delta?: string;
  trend?: "up" | "down";
};

type MetricRailProps = {
  metrics?: Metric[];
};

const defaultMetrics: Metric[] = [
  { label: "Revenue", value: "$48.2k", delta: "+12.4%", trend: "up" },
  { label: "Active users", value: "8,921", delta: "+3.1%", trend: "up" },
  { label: "Churn", value: "1.9%", delta: "-0.4%", trend: "down" },
  { label: "Avg. session", value: "6m 12s" },
];

export default function MetricRail({ metrics = defaultMetrics }: MetricRailProps) {
  return (
    <dl className="grid w-full max-w-2xl grid-cols-2 gap-3 lg:grid-cols-4">
      {metrics.map((metric) => (
        <div
          key={metric.label}
          className="rounded-2xl border border-white/10 bg-white/[0.05] p-4 transition hover:border-white/20"
        >
          <dt className="text-xs font-medium uppercase tracking-[0.1em] text-white/45">{metric.label}</dt>
          <dd className="mt-2 flex items-baseline gap-2">
            <span className="text-2xl font-semibold text-white">{metric.value}</span>
            {metric.delta ? (
              <span
                className={`text-xs font-semibold ${
                  metric.trend === "down" ? "text-rose-300/90" : "text-emerald-300/90"
                }`}
              >
                {metric.delta}
              </span>
            ) : null}
          </dd>
        </div>
      ))}
    </dl>
  );
}