Chip subtitles across the node catalog mixed three distinct registers with no visual differentiation: live configured values (“Deadband ±0”, “1s”), fallback resource descriptions, and action-prompt hint lines (“Build your formula”, “Enter URL…”, “Configure SMTP…”). A user scanning the chip list had no visual cue distinguishing “this node is unconfigured and needs setup” from “this is the node’s current state.”
Each chip composable rendered its hint/prompt text as a plain Text or EmojiText with color = onSurfaceVariant, identical in typography to configured-state subtitles. No shared composable enforced a consistent “prompt” look, so new node types varied freely. Chips that were fully unconfigured also still passed configured = true (default) to NodeChipScaffold, keeping the secondaryContainer background even when they had no meaningful content to show.
Added PromptSubtitle(text, modifier) to NodeChip.kt: italic bodySmall in onSurfaceVariant, backed by EmojiText for cross-platform emoji support. Applied it to every chip’s hint/prompt line: CalculationChip, ComputeChip, LambdaChip, LogicGateChip, SMTPChip, OutgoingWebHookChip, MqttChip. For fully-unconfigured chips — those whose entire content reduces to the prompt — also wired the correct configured expression into NodeChipScaffold so the chip surface switches from secondaryContainer to surfaceVariant.
Use PromptSubtitle(…) for every “needs setup” hint line in a new chip composable. If the chip has no meaningful configured content (formula is empty, no inputs wired, no script selected), also pass configured = false to NodeChipScaffold. A reviewer who sees a raw Text(…, color = onSurfaceVariant) in a chip body should ask whether it belongs in PromptSubtitle instead.