22 * Read Need compose + option synthesis/review (deposit Obfuscations twin).
33 * Free-text Need + Relevant / Irrelevant path pickers + synthesize CTA.
44 * Options list and settle live in the parent detail grid (deposit parity).
5+ * Cancel lives only on ReadsPipelineTelemetry (header right) — not here.
56 */
67"use client" ;
78
@@ -25,9 +26,6 @@ export function ReadsNeedComposePanel(props: {
2526 error : string | null ;
2627 runId : string | null ;
2728 onSynthesize : ( ) => void ;
28- /** Cooperative cancel while synthesis is running (deposit twin). */
29- onCancel ?: ( ) => void ;
30- isCancelling ?: boolean ;
3129 canSynthesize : boolean ;
3230 isConfigLocked ?: boolean ;
3331} ) {
@@ -43,8 +41,6 @@ export function ReadsNeedComposePanel(props: {
4341 error,
4442 runId,
4543 onSynthesize,
46- onCancel,
47- isCancelling = false ,
4844 canSynthesize,
4945 isConfigLocked = false ,
5046 } = props ;
@@ -92,42 +88,26 @@ export function ReadsNeedComposePanel(props: {
9288 repositoryContext = { repositoryContext }
9389 />
9490
95- < div className = "mt-4 flex flex-wrap items-center gap-3" >
96- < ProductSynthesizeAssetPackOptionsButton
97- data-testid = "reads-synthesize-options"
98- onClick = { onSynthesize }
99- disabled = { ! canSynthesize || ! need . trim ( ) || running }
100- running = { running && status === "running" }
101- />
102- { running && onCancel ? (
103- < button
104- type = "button"
105- data-testid = "reads-cancel-synthesis"
106- aria-label = "Cancel read synthesis run"
107- disabled = { isCancelling }
108- onClick = { ( ) => {
109- onCancel ( ) ;
110- } }
111- className = "border border-rose-300/30 bg-rose-300/10 px-3 py-2 text-[0.62rem] font-medium uppercase tracking-[0.14em] text-rose-100 transition hover:border-rose-200/45 hover:bg-rose-300/18 disabled:cursor-not-allowed disabled:opacity-40"
112- >
113- { isCancelling ? "Cancelling…" : "Cancel run" }
114- </ button >
115- ) : null }
116- { status === "cancelled" ? (
117- < span
118- data-testid = "reads-synthesis-cancelled-badge"
119- className = "border border-rose-300/25 bg-rose-300/10 px-3 py-2 font-mono text-[0.62rem] uppercase tracking-[0.14em] text-rose-100"
120- >
121- Cancelled
122- </ span >
123- ) : null }
124- </ div >
91+ < ProductSynthesizeAssetPackOptionsButton
92+ data-testid = "reads-synthesize-options"
93+ onClick = { onSynthesize }
94+ disabled = { ! canSynthesize || ! need . trim ( ) || running }
95+ running = { running && status === "running" }
96+ />
12597 { runId || status !== "idle" ? (
12698 < div className = "mt-2 flex flex-wrap items-center gap-3 text-xs text-neutral-500" >
12799 { runId ? (
128100 < span className = "font-mono text-[0.65rem]" > { runId } </ span >
129101 ) : null }
130102 < span className = "uppercase tracking-wide" > status: { status } </ span >
103+ { status === "cancelled" ? (
104+ < span
105+ data-testid = "reads-synthesis-cancelled-badge"
106+ className = "border border-rose-300/25 bg-rose-300/10 px-2 py-0.5 font-mono text-[0.62rem] uppercase tracking-[0.14em] text-rose-100"
107+ >
108+ Cancelled
109+ </ span >
110+ ) : null }
131111 </ div >
132112 ) : null }
133113
0 commit comments