In the Connect Nodes wizard step 1 type-selector, a node type with zero available candidates (e.g. “DataPoint 0”) was rendered with the same text color, opacity, and row style as types with candidates (e.g. “Client 1”). Users could not distinguish “nothing to connect here” from “one node available.”
The row composable in NodeList.kt’s SourceList step-1 branch applied the same styling unconditionally regardless of candidateCount. The title text used the default onSurface color and the row was always clickable, even when tapping it would land on an empty list.
val isEmpty = candidateCount == 0 flag in the row loop.Modifier.alpha(0.5f) to the row when empty, and removed the clickable modifier so empty rows are inert.color = MaterialTheme.colorScheme.onSurfaceVariant to the title Text when empty (matching the muted secondary label convention used elsewhere).When rendering a list where some items represent “zero available,” treat count == 0 as a mini empty-state: dim (alpha or muted color) and disable interaction. The pattern is: if (isEmpty) Modifier.alpha(0.5f) else Modifier.clickable { … } — non-interactive rows should never carry a clickable modifier.