diff --git a/furniture-3d-system/src/app/intake/new-product-management/NewProductManagementDashboard.tsx b/furniture-3d-system/src/app/intake/new-product-management/NewProductManagementDashboard.tsx
index 19acf1b1..ee98db9a 100644
--- a/furniture-3d-system/src/app/intake/new-product-management/NewProductManagementDashboard.tsx
+++ b/furniture-3d-system/src/app/intake/new-product-management/NewProductManagementDashboard.tsx
@@ -128,6 +128,17 @@ type TimingOverview = {
runningLongestTargetDays: number | null;
};
+type CompletedTimingDetailFilter =
+ | {
+ kind: "department";
+ key: CompletedDepartmentTimingSummary["key"];
+ }
+ | {
+ kind: "max-overtime";
+ rowId: string;
+ }
+ | null;
+
type BaseAnalysisDatum = (typeof ANALYSIS_DATA)[Exclude<
AnalysisView,
"overview"
@@ -1890,6 +1901,8 @@ function EfficiencyCard({
note,
tone,
departmentItems,
+ hoverDetail,
+ active = false,
onClick,
}: {
label: string;
@@ -1906,8 +1919,16 @@ function EfficiencyCard({
tone: "good" | "danger";
previewRows?: Array<{ openingCode: string; productName: string }>;
actionLabel?: string;
+ active?: boolean;
onSelect?: () => void;
}>;
+ hoverDetail?: {
+ title: string;
+ detail: string;
+ lines?: string[];
+ actionLabel?: string;
+ };
+ active?: boolean;
onClick?: () => void;
}) {
const toneClass = {
@@ -1922,7 +1943,7 @@ function EfficiencyCard({
{label}
{onClick ? (
-
+
) : null}
@@ -1949,9 +1970,11 @@ function EfficiencyCard({
? "right-0"
: "left-1/2 -translate-x-1/2";
const itemTone =
- item.tone === "danger"
- ? "border-[#efd3cf] bg-[#fff8f7] text-[#a84741]"
- : "border-[#cfe2dd] bg-[#f4faf8] text-[#28705a]";
+ item.active
+ ? "border-[#245f5a] bg-[#eaf4f1] text-[#245f5a] ring-1 ring-[#245f5a]/20"
+ : item.tone === "danger"
+ ? "border-[#efd3cf] bg-[#fff8f7] text-[#a84741]"
+ : "border-[#cfe2dd] bg-[#f4faf8] text-[#28705a]";
const itemClassName = `group/dept relative flex min-w-0 flex-col items-center rounded border px-1 py-1 outline-none focus-visible:ring-2 focus-visible:ring-[#245f5a]/30 ${item.onSelect ? "cursor-pointer hover:shadow-sm" : ""} ${itemTone}`;
const itemContent = (
<>
@@ -2000,6 +2023,7 @@ function EfficiencyCard({
{timingDetailMode === "completed" ? (
{
setTimingDetailMode(null);
- setCompletedDepartmentFilter(null);
+ setCompletedTimingFilter(null);
}}
onSelectRow={setSelectedRow}
/>
@@ -3328,7 +3481,7 @@ export default function NewProductManagementDashboard({
type="button"
aria-expanded={timingDetailMode === "running"}
onClick={() => {
- setCompletedDepartmentFilter(null);
+ setCompletedTimingFilter(null);
setTimingDetailMode((current) =>
current === "running" ? null : "running",
);