From 52d121269195f0e799d0ab4241e4facc3c7c0596 Mon Sep 17 00:00:00 2001
From: soryu <soryu@soryu.co>
Date: Mon, 19 Jan 2026 17:55:22 +0000
Subject: Add right-click context menu for contracts on contracts and board
 pages (#8)

Implement a reusable ContractContextMenu component that provides:
- Mark as Complete/Active/Archive status actions (conditionally shown)
- Go to Supervisor Task link (when supervisor exists)
- Delete action with confirmation

Integrate context menu into:
- ContractList.tsx on the contracts page
- WorkflowBoard on the workflow/board page via PhaseColumn and WorkflowContractCard

Features match ElementContextMenu patterns:
- Fixed positioning with z-50
- Click outside and Escape key close handlers
- Viewport overflow prevention
- Dark theme colors (#0a1628, #0d1b2d, #75aafc, #9bc3ff)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
---
 makima/frontend/src/components/workflow/PhaseColumn.tsx | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'makima/frontend/src/components/workflow/PhaseColumn.tsx')

diff --git a/makima/frontend/src/components/workflow/PhaseColumn.tsx b/makima/frontend/src/components/workflow/PhaseColumn.tsx
index ddea85f..277b04c 100644
--- a/makima/frontend/src/components/workflow/PhaseColumn.tsx
+++ b/makima/frontend/src/components/workflow/PhaseColumn.tsx
@@ -7,6 +7,7 @@ interface PhaseColumnProps {
   contracts: ContractSummary[];
   onContractClick: (contractId: string) => void;
   onDrop: (contractId: string, phase: ContractPhase) => void;
+  onContextMenu?: (e: React.MouseEvent, contract: ContractSummary) => void;
 }
 
 const phaseConfig: Record<
@@ -50,6 +51,7 @@ export function PhaseColumn({
   contracts,
   onContractClick,
   onDrop,
+  onContextMenu,
 }: PhaseColumnProps) {
   const [isDragOver, setIsDragOver] = useState(false);
   const config = phaseConfig[phase];
@@ -114,6 +116,7 @@ export function PhaseColumn({
                 e.dataTransfer.setData("contractId", contract.id);
                 e.dataTransfer.effectAllowed = "move";
               }}
+              onContextMenu={onContextMenu ? (e) => onContextMenu(e, contract) : undefined}
             />
           ))
         )}
-- 
cgit v1.2.3

