The DataPoint chip rendered on a white/near-white background in the dark-mode catalog
and showed the node’s auto-generated ID (data-point-1782194560) styled as a blue
hyperlink with no chip background — inconsistent with every other chip in the catalog.
Additionally, DataType radio labels showed ALL_CAPS enum names, and section headers in
Journal and TaskList used primary blue (link colour), while the PUB/SMTP protocol
badges used secondaryContainer instead of the primaryContainer used by GET/READ.
DataPointChip delegated to DataPointRow(id, showManualEntry=false) which renders
a bare Row with no Surface wrapper, so no chip background colour is applied. It
displayed meta.name with color = primary + textDecoration = Underline, giving
the hyperlink appearance. Other chip issues were independent one-line token mistakes:
primary where onSurfaceVariant is correct for section headers, and
secondaryContainer where primaryContainer matches the GET/READ pill convention.
The DataType radio labels issue traced to HorizontalOptionSelector calling
type.toString() on enum constants, which returns the ALL_CAPS enum name.
DataPointView.kt: replaced DataPointChip body to call TitledChip(node, meta?.name),
giving the chip the standard NodeChipScaffold surface (secondaryContainer / surfaceVariant)
and the canonical “type title above name subtitle” layout.DataPointView.kt: passed label = { it.name.lowercase().replaceFirstChar { c -> c.uppercase() } }
to HorizontalOptionSelector so DataType options render as “Color”, “Digital”, “Double”.DialogComponents.kt: added an optional label: (T) -> String = { it.toString() } parameter
to HorizontalOptionSelector so callers can override the display string without touching the
enum (backward-compatible; all existing callers unchanged).EditJournal.kt: changed “Add New Entry” and “Journal Entries (…)” section headers from
primary to onSurfaceVariant.EditTaskList.kt: changed “Priority” section header from primary to onSurfaceVariant.EditMqtt.kt: changed MQTT action badge from when { PUB→secondaryContainer, SUB→primaryContainer }
to a uniform primaryContainer, matching GET/READ/WRITE badge convention.EditSMTP.kt: changed SMTP badge from secondaryContainer to primaryContainer.TitledChip or NodeChipScaffold
rather than a bare Row. The canonical structure lives in NodeChip.kt.onSurfaceVariant; only interactive
elements (links, active tabs, selected indicators) use primary.primaryContainer for consistency; reserve
secondaryContainer for chips where a semantic distinction is needed and documented.HorizontalOptionSelector should accept a label transform so
callers are not forced to rely on toString() for display — especially for enums whose
names are SCREAMING_SNAKE_CASE constants.