The krillapp_datapoint_settings catalog screenshot showed the “Unit” OutlinedTextField with its label sitting inside the field, making it visually indistinguishable from placeholder text. The adjacent Name, Precision, and Snapshot fields all displayed their labels floating above the outline, creating an inconsistent appearance that the nightly UX audit flagged as “Unit field missing external label.”
Material3’s OutlinedTextField places the label composable in two positions depending on value and focus:
DataPointMetaData defaults to unit = "". The catalog screenshot test uses type.meta() to build each node, which produces that empty default. In a static screenshot (no focus), the Unit field’s label renders inside the field while the sibling fields (Name = "data-point-timestamp", Precision = "2", Snapshot = "0.0") all have non-empty values, so their labels float above. The label parameter was already present in the Compose code — the bug was purely in the fixture default.
Updated catalogNode() in NodeCatalogScreenshots.kt to special-case KrillApp.DataPoint: instead of type.meta(), it now builds a DataPointMetaData with unit = "°C" and a representative snapshot. This matches Fixtures.populatedSwarm() and ensures all four text-input fields on the settings screen show their labels in the floated position, consistent with how a real configured DataPoint looks.
composeApp/src/desktopTest/kotlin/krill/zone/screenshot/NodeCatalogScreenshots.kt — added DataPointMetaData/Snapshot imports; replaced type.meta() with a populated DataPointMetaData when type == KrillApp.DataPoint.type.meta() and the default metadata has an empty string field, the Material3 floating label will appear inside the field rather than above it. Catalog screenshots should use representative, non-empty values for any field whose label visibility depends on content."" but sibling fields have non-empty defaults, the field needs a populated fixture value to render consistently.