From c3f8dec1045e6df7bc540ab56031d7bb0417b6ab Mon Sep 17 00:00:00 2001 From: nntrivi2001 Date: Tue, 15 Sep 2026 14:53:00 +0700 Subject: [PATCH] refactor(lanes): drop the tick box and radio dots from the Add-lane modal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both controls already render as cards that light up when selected — the same selected/unselected treatment LaneStripCard uses — so the tick box and the two radio dots were a second indicator of a state the card was already showing. Neither input is removed, only hidden (`sr-only`): they are still what a keyboard toggles and what a screen reader announces, so the cards take a `focus-within` ring in exchange for the focus ring that went with them. The router radios needed one thing the checkbox did not. "AI Router" is disabled until the profile list lands, and the greyed-out dot was the only thing showing that; hidden, it would have read as a card you can click that does nothing — the dead control the existing comment warns about. So disabled is now its own branch: muted text, reduced opacity, no hover, not-allowed cursor. Layout follows: no flex row with a gap when there is one child left, and the two equal-width router cards centre their label rather than leaving it hard against an empty left edge. Visual only. No behaviour, API or schema change. --- client/src/components/lanes/AddLaneModal.tsx | 52 ++++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/client/src/components/lanes/AddLaneModal.tsx b/client/src/components/lanes/AddLaneModal.tsx index 52549bc6..c542fa5e 100644 --- a/client/src/components/lanes/AddLaneModal.tsx +++ b/client/src/components/lanes/AddLaneModal.tsx @@ -475,22 +475,31 @@ export function AddLaneModal({ ] as const ).map((option) => { const active = option.value === "native" ? router === "native" : router !== "native"; + // Clicking "AI Router" before the list lands would resolve back to + // Native and read as a dead control. + const disabled = option.value === "router" && !routersLoaded; return (