diff --git a/core/ui/src/main/kotlin/org/meshtastic/core/ui/component/ClickableTextField.kt b/core/ui/src/main/kotlin/org/meshtastic/core/ui/component/ClickableTextField.kt
deleted file mode 100644
index 2d4accc60..000000000
--- a/core/ui/src/main/kotlin/org/meshtastic/core/ui/component/ClickableTextField.kt
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2025 Meshtastic LLC
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package org.meshtastic.core.ui.component
-
-import androidx.compose.foundation.interaction.MutableInteractionSource
-import androidx.compose.foundation.interaction.collectIsPressedAsState
-import androidx.compose.material3.Icon
-import androidx.compose.material3.OutlinedTextField
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.vector.ImageVector
-import org.jetbrains.compose.resources.StringResource
-import org.jetbrains.compose.resources.stringResource
-
-@Composable
-fun ClickableTextField(
- label: StringResource,
- enabled: Boolean,
- trailingIcon: ImageVector,
- value: String,
- onClick: () -> Unit,
- modifier: Modifier = Modifier,
- isError: Boolean = false,
-) {
- val source = remember { MutableInteractionSource() }
- val isPressed by source.collectIsPressedAsState()
- if (isPressed) onClick()
-
- OutlinedTextField(
- value,
- onValueChange = {},
- enabled = enabled,
- readOnly = true,
- label = { Text(stringResource(label)) },
- trailingIcon = { Icon(trailingIcon, null) },
- isError = isError,
- interactionSource = source,
- modifier = modifier,
- )
-}
diff --git a/core/ui/src/screenshotTest/kotlin/org/meshtastic/core/ui/ComponentScreenshotTest.kt b/core/ui/src/screenshotTest/kotlin/org/meshtastic/core/ui/ComponentScreenshotTest.kt
new file mode 100644
index 000000000..9da44d81e
--- /dev/null
+++ b/core/ui/src/screenshotTest/kotlin/org/meshtastic/core/ui/ComponentScreenshotTest.kt
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2025-2026 Meshtastic LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.meshtastic.core.ui
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.rounded.Android
+import androidx.compose.material3.Surface
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.tooling.preview.PreviewParameter
+import androidx.compose.ui.unit.dp
+import com.android.tools.screenshot.PreviewTest
+import org.meshtastic.core.database.model.Node
+import org.meshtastic.core.ui.component.BatteryInfoPreviewParameterProvider
+import org.meshtastic.core.ui.component.ChannelInfo
+import org.meshtastic.core.ui.component.DistanceInfo
+import org.meshtastic.core.ui.component.ElevationInfo
+import org.meshtastic.core.ui.component.HopsInfo
+import org.meshtastic.core.ui.component.IAQScale
+import org.meshtastic.core.ui.component.IaqDisplayMode
+import org.meshtastic.core.ui.component.IndoorAirQuality
+import org.meshtastic.core.ui.component.ListItem
+import org.meshtastic.core.ui.component.MaterialBatteryInfo
+import org.meshtastic.core.ui.component.NodeChip
+import org.meshtastic.core.ui.component.SatelliteCountInfo
+import org.meshtastic.core.ui.component.SignalInfo
+import org.meshtastic.core.ui.component.SwitchListItem
+import org.meshtastic.core.ui.component.TitledCard
+import org.meshtastic.core.ui.component.preview.NodePreviewParameterProvider
+import org.meshtastic.core.ui.theme.AppTheme
+import org.meshtastic.proto.Config
+
+class ComponentScreenshotTest {
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun BatteryInfoTest(@PreviewParameter(BatteryInfoPreviewParameterProvider::class) info: Pair) {
+ AppTheme {
+ MaterialBatteryInfo(level = info.first, voltage = info.second)
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun SignalInfoTest(@PreviewParameter(NodePreviewParameterProvider::class) node: Node) {
+ AppTheme {
+ SignalInfo(node = node)
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun NodeChipTest(@PreviewParameter(NodePreviewParameterProvider::class) node: Node) {
+ AppTheme {
+ NodeChip(node = node)
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun DistanceInfoTest() {
+ AppTheme {
+ DistanceInfo(distance = "12.3 km")
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun ElevationInfoTest() {
+ AppTheme {
+ ElevationInfo(altitude = 1234, system = Config.DisplayConfig.DisplayUnits.METRIC, suffix = "m")
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun HopsInfoTest() {
+ AppTheme {
+ HopsInfo(hops = 3)
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun SatelliteCountInfoTest() {
+ AppTheme {
+ SatelliteCountInfo(satCount = 8)
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun ChannelInfoTest() {
+ AppTheme {
+ ChannelInfo(channel = 1)
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun ListItemTest() {
+ AppTheme {
+ ListItem(text = "Example Item", leadingIcon = Icons.Rounded.Android) {}
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun SwitchListItemTest() {
+ AppTheme {
+ SwitchListItem(checked = true, text = "Example Switch", onClick = {})
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun TitledCardTest() {
+ AppTheme {
+ Surface {
+ TitledCard(title = "Example Title") {
+ Box(modifier = Modifier.fillMaxWidth().height(50.dp))
+ }
+ }
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun IAQScaleTest() {
+ AppTheme {
+ IAQScale()
+ }
+ }
+
+ @PreviewTest
+ @Preview(showBackground = true)
+ @Composable
+ fun IndoorAirQualityPillTest() {
+ AppTheme {
+ IndoorAirQuality(iaq = 101, displayMode = IaqDisplayMode.Pill)
+ }
+ }
+}
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_0.png
new file mode 100644
index 000000000..0e5a618e7
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_1.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_1.png
new file mode 100644
index 000000000..4587fccdf
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_1.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_2.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_2.png
new file mode 100644
index 000000000..9c6561829
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_2.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_3.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_3.png
new file mode 100644
index 000000000..c064a352c
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_3.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_4.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_4.png
new file mode 100644
index 000000000..26173d894
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_4.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_5.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_5.png
new file mode 100644
index 000000000..316da4d15
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_5.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_6.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_6.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_6.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_7.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_7.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/BatteryInfoTest_748aa731_e7e392ea_7.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/ChannelInfoTest_748aa731_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/ChannelInfoTest_748aa731_0.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/ChannelInfoTest_748aa731_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/DistanceInfoTest_748aa731_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/DistanceInfoTest_748aa731_0.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/DistanceInfoTest_748aa731_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/ElevationInfoTest_748aa731_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/ElevationInfoTest_748aa731_0.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/ElevationInfoTest_748aa731_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/HopsInfoTest_748aa731_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/HopsInfoTest_748aa731_0.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/HopsInfoTest_748aa731_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/IAQScaleTest_748aa731_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/IAQScaleTest_748aa731_0.png
new file mode 100644
index 000000000..23a4a6558
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/IAQScaleTest_748aa731_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/IndoorAirQualityPillTest_748aa731_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/IndoorAirQualityPillTest_748aa731_0.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/IndoorAirQualityPillTest_748aa731_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/ListItemTest_748aa731_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/ListItemTest_748aa731_0.png
new file mode 100644
index 000000000..4f6cc530a
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/ListItemTest_748aa731_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_0.png
new file mode 100644
index 000000000..b95c37a8a
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_1.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_1.png
new file mode 100644
index 000000000..10a143fca
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_1.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_2.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_2.png
new file mode 100644
index 000000000..6244babaf
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_2.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_3.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_3.png
new file mode 100644
index 000000000..41ce867ae
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_3.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_4.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_4.png
new file mode 100644
index 000000000..d032a70d5
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/NodeChipTest_748aa731_41783942_4.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SatelliteCountInfoTest_748aa731_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SatelliteCountInfoTest_748aa731_0.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SatelliteCountInfoTest_748aa731_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_0.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_1.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_1.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_1.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_2.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_2.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_2.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_3.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_3.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_3.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_4.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_4.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SignalInfoTest_748aa731_41783942_4.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SwitchListItemTest_748aa731_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SwitchListItemTest_748aa731_0.png
new file mode 100644
index 000000000..508b6d236
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/SwitchListItemTest_748aa731_0.png differ
diff --git a/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/TitledCardTest_748aa731_0.png b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/TitledCardTest_748aa731_0.png
new file mode 100644
index 000000000..06a5a72c6
Binary files /dev/null and b/core/ui/src/screenshotTestFdroidDebug/reference/org/meshtastic/core/ui/ComponentScreenshotTest/TitledCardTest_748aa731_0.png differ
diff --git a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/ChannelInfo.kt b/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/ChannelInfo.kt
deleted file mode 100644
index 040856fc8..000000000
--- a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/ChannelInfo.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2025-2026 Meshtastic LLC
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.meshtastic.feature.node.component
-
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.rounded.Tsunami
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.tooling.preview.PreviewLightDark
-import org.meshtastic.core.ui.theme.AppTheme
-
-@Composable
-fun ChannelInfo(
- channel: Int,
- modifier: Modifier = Modifier,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.Tsunami,
- contentDescription = "Channel",
- text = channel.toString(),
- contentColor = contentColor,
- )
-}
-
-@PreviewLightDark
-@Composable
-private fun ChannelInfoPreview() {
- AppTheme { ChannelInfo(channel = 2) }
-}
diff --git a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/CompassBottomSheet.kt b/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/CompassBottomSheet.kt
index 7f8b99573..049f75adf 100644
--- a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/CompassBottomSheet.kt
+++ b/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/CompassBottomSheet.kt
@@ -70,6 +70,7 @@ import org.meshtastic.core.resources.compass_uncertainty_unknown
import org.meshtastic.core.resources.elevation_suffix
import org.meshtastic.core.resources.exchange_position
import org.meshtastic.core.resources.last_position_update
+import org.meshtastic.core.ui.component.ElevationInfo
import org.meshtastic.core.ui.theme.AppTheme
import org.meshtastic.feature.node.compass.CompassUiState
import org.meshtastic.feature.node.compass.CompassWarning
diff --git a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/DistanceInfo.kt b/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/DistanceInfo.kt
deleted file mode 100644
index c65b9a490..000000000
--- a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/DistanceInfo.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2025-2026 Meshtastic LLC
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.meshtastic.feature.node.component
-
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.rounded.SocialDistance
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.tooling.preview.PreviewLightDark
-import org.jetbrains.compose.resources.stringResource
-import org.meshtastic.core.resources.Res
-import org.meshtastic.core.resources.distance
-import org.meshtastic.core.ui.theme.AppTheme
-
-@Composable
-fun DistanceInfo(
- distance: String,
- modifier: Modifier = Modifier,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.SocialDistance,
- contentDescription = stringResource(Res.string.distance),
- label = stringResource(Res.string.distance),
- text = distance,
- contentColor = contentColor,
- )
-}
-
-@PreviewLightDark
-@Composable
-private fun DistanceInfoPreview() {
- AppTheme { DistanceInfo(distance = "423 mi.") }
-}
diff --git a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/ElevationInfo.kt b/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/ElevationInfo.kt
deleted file mode 100644
index dca3b143f..000000000
--- a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/ElevationInfo.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2025-2026 Meshtastic LLC
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.meshtastic.feature.node.component
-
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.tooling.preview.Preview
-import org.jetbrains.compose.resources.stringResource
-import org.meshtastic.core.model.util.metersIn
-import org.meshtastic.core.model.util.toString
-import org.meshtastic.core.resources.Res
-import org.meshtastic.core.resources.altitude
-import org.meshtastic.core.resources.elevation_suffix
-import org.meshtastic.core.ui.icon.Elevation
-import org.meshtastic.core.ui.icon.MeshtasticIcons
-import org.meshtastic.proto.Config
-
-@Composable
-fun ElevationInfo(
- modifier: Modifier = Modifier,
- altitude: Int,
- system: Config.DisplayConfig.DisplayUnits,
- suffix: String = stringResource(Res.string.elevation_suffix),
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = MeshtasticIcons.Elevation,
- contentDescription = stringResource(Res.string.altitude),
- label = stringResource(Res.string.altitude),
- text = altitude.metersIn(system).toString(system) + " " + suffix,
- contentColor = contentColor,
- )
-}
-
-@Composable
-@Preview
-private fun ElevationInfoPreview() {
- MaterialTheme { ElevationInfo(altitude = 100, system = Config.DisplayConfig.DisplayUnits.METRIC, suffix = "ASL") }
-}
diff --git a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/HopsInfo.kt b/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/HopsInfo.kt
deleted file mode 100644
index c888bbca1..000000000
--- a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/HopsInfo.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2025-2026 Meshtastic LLC
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.meshtastic.feature.node.component
-
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.rounded.CrueltyFree
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.tooling.preview.PreviewLightDark
-import org.jetbrains.compose.resources.stringResource
-import org.meshtastic.core.resources.Res
-import org.meshtastic.core.resources.hops_away
-import org.meshtastic.core.ui.theme.AppTheme
-
-@Composable
-fun HopsInfo(hops: Int, modifier: Modifier = Modifier, contentColor: Color = MaterialTheme.colorScheme.onSurface) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.CrueltyFree,
- contentDescription = stringResource(Res.string.hops_away),
- label = stringResource(Res.string.hops_away),
- text = hops.toString(),
- contentColor = contentColor,
- )
-}
-
-@PreviewLightDark
-@Composable
-private fun HopsInfoPreview() {
- AppTheme { HopsInfo(hops = 3) }
-}
diff --git a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/IconInfo.kt b/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/IconInfo.kt
deleted file mode 100644
index 1c02eb024..000000000
--- a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/IconInfo.kt
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2025-2026 Meshtastic LLC
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.meshtastic.feature.node.component
-
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.size
-import androidx.compose.material3.Icon
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.vector.ImageVector
-import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import org.meshtastic.core.ui.icon.Elevation
-import org.meshtastic.core.ui.icon.MeshtasticIcons
-
-private const val SIZE_ICON = 20
-
-@Composable
-fun IconInfo(
- icon: ImageVector,
- contentDescription: String,
- modifier: Modifier = Modifier,
- label: String? = null,
- text: String? = null,
- style: TextStyle = MaterialTheme.typography.labelMedium,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
- content: @Composable () -> Unit = {},
-) {
- Row(
- modifier = modifier,
- verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.spacedBy(2.dp),
- ) {
- Icon(
- modifier = Modifier.size(SIZE_ICON.dp),
- imageVector = icon,
- contentDescription = contentDescription,
- tint = contentColor,
- )
- label?.let { Text(text = it, style = style, color = contentColor) }
- text?.let { Text(text = it, style = style, color = contentColor) }
- content()
- }
-}
-
-@Composable
-@Preview
-private fun IconInfoPreview() {
- MaterialTheme {
- IconInfo(icon = MeshtasticIcons.Elevation, contentDescription = "Elevation", content = { Text(text = "100") })
- }
-}
diff --git a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/LastHeardInfo.kt b/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/LastHeardInfo.kt
deleted file mode 100644
index 8821065a0..000000000
--- a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/LastHeardInfo.kt
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2025-2026 Meshtastic LLC
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.meshtastic.feature.node.component
-
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.vectorResource
-import androidx.compose.ui.tooling.preview.PreviewLightDark
-import org.jetbrains.compose.resources.stringResource
-import org.jetbrains.compose.resources.vectorResource
-import org.meshtastic.core.common.util.nowSeconds
-import org.meshtastic.core.resources.Res
-import org.meshtastic.core.resources.ic_antenna
-import org.meshtastic.core.resources.node_sort_last_heard
-import org.meshtastic.core.ui.theme.AppTheme
-import org.meshtastic.core.ui.util.formatAgo
-
-@Composable
-fun LastHeardInfo(
- modifier: Modifier = Modifier,
- lastHeard: Int,
- showLabel: Boolean = true,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = vectorResource(Res.drawable.ic_antenna),
- contentDescription = stringResource(Res.string.node_sort_last_heard),
- label = if (showLabel) stringResource(Res.string.node_sort_last_heard) else null,
- text = formatAgo(lastHeard),
- contentColor = contentColor,
- )
-}
-
-@PreviewLightDark
-@Composable
-private fun LastHeardInfoPreview() {
- AppTheme { LastHeardInfo(lastHeard = nowSeconds.toInt() - 8600) }
-}
diff --git a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/SatelliteCountInfo.kt b/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/SatelliteCountInfo.kt
deleted file mode 100644
index f11749d98..000000000
--- a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/SatelliteCountInfo.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2025-2026 Meshtastic LLC
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.meshtastic.feature.node.component
-
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.twotone.SatelliteAlt
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.tooling.preview.PreviewLightDark
-import org.jetbrains.compose.resources.stringResource
-import org.meshtastic.core.resources.Res
-import org.meshtastic.core.resources.sats
-import org.meshtastic.core.ui.theme.AppTheme
-
-@Composable
-fun SatelliteCountInfo(
- modifier: Modifier = Modifier,
- satCount: Int,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = Icons.TwoTone.SatelliteAlt,
- contentDescription = stringResource(Res.string.sats),
- label = stringResource(Res.string.sats),
- text = "$satCount",
- contentColor = contentColor,
- )
-}
-
-@PreviewLightDark
-@Composable
-private fun SatelliteCountInfoPreview() {
- AppTheme { SatelliteCountInfo(satCount = 5) }
-}
diff --git a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/TelemetryInfo.kt b/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/TelemetryInfo.kt
deleted file mode 100644
index 12acecf9d..000000000
--- a/feature/node/src/main/kotlin/org/meshtastic/feature/node/component/TelemetryInfo.kt
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (c) 2025-2026 Meshtastic LLC
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-@file:Suppress("TooManyFunctions")
-
-package org.meshtastic.feature.node.component
-
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.rounded.Air
-import androidx.compose.material.icons.rounded.ElectricBolt
-import androidx.compose.material.icons.rounded.Fingerprint
-import androidx.compose.material.icons.rounded.Grass
-import androidx.compose.material.icons.rounded.People
-import androidx.compose.material.icons.rounded.Router
-import androidx.compose.material.icons.rounded.Thermostat
-import androidx.compose.material.icons.rounded.WaterDrop
-import androidx.compose.material.icons.rounded.Work
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import org.jetbrains.compose.resources.stringResource
-import org.meshtastic.core.resources.Res
-import org.meshtastic.core.resources.env_metrics_log
-import org.meshtastic.core.resources.humidity
-import org.meshtastic.core.resources.iaq
-import org.meshtastic.core.resources.node_id
-import org.meshtastic.core.resources.pax
-import org.meshtastic.core.resources.pax_metrics_log
-import org.meshtastic.core.resources.role
-import org.meshtastic.core.resources.soil_moisture
-import org.meshtastic.core.resources.soil_temperature
-import org.meshtastic.core.resources.temperature
-
-@Composable
-fun TemperatureInfo(
- temp: String,
- modifier: Modifier = Modifier,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.Thermostat,
- contentDescription = stringResource(Res.string.env_metrics_log),
- label = stringResource(Res.string.temperature),
- text = temp,
- contentColor = contentColor,
- )
-}
-
-@Composable
-fun HumidityInfo(
- humidity: String,
- modifier: Modifier = Modifier,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.WaterDrop,
- contentDescription = stringResource(Res.string.env_metrics_log),
- label = stringResource(Res.string.humidity),
- text = humidity,
- contentColor = contentColor,
- )
-}
-
-@Composable
-fun SoilTemperatureInfo(
- temp: String,
- modifier: Modifier = Modifier,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.Grass,
- contentDescription = stringResource(Res.string.env_metrics_log),
- label = stringResource(Res.string.soil_temperature),
- text = temp,
- contentColor = contentColor,
- )
-}
-
-@Composable
-fun SoilMoistureInfo(
- moisture: String,
- modifier: Modifier = Modifier,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.Grass,
- contentDescription = stringResource(Res.string.env_metrics_log),
- label = stringResource(Res.string.soil_moisture),
- text = moisture,
- contentColor = contentColor,
- )
-}
-
-@Composable
-fun PaxcountInfo(
- pax: String,
- modifier: Modifier = Modifier,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.People,
- contentDescription = stringResource(Res.string.pax_metrics_log),
- label = stringResource(Res.string.pax),
- text = pax,
- contentColor = contentColor,
- )
-}
-
-@Composable
-fun AirQualityInfo(
- iaq: String,
- modifier: Modifier = Modifier,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.Air,
- contentDescription = stringResource(Res.string.env_metrics_log),
- label = stringResource(Res.string.iaq),
- text = iaq,
- contentColor = contentColor,
- )
-}
-
-@Composable
-fun PowerInfo(
- value: String,
- modifier: Modifier = Modifier,
- label: String? = null,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.ElectricBolt,
- contentDescription = stringResource(Res.string.env_metrics_log),
- label = label,
- text = value,
- contentColor = contentColor,
- )
-}
-
-@Composable
-fun HardwareInfo(
- hwModel: String,
- modifier: Modifier = Modifier,
- contentColor: Color = MaterialTheme.colorScheme.onSurface,
-) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.Router,
- contentDescription = "Hardware Model",
- text = hwModel,
- style = MaterialTheme.typography.labelSmall,
- contentColor = contentColor,
- )
-}
-
-@Composable
-fun RoleInfo(role: String, modifier: Modifier = Modifier, contentColor: Color = MaterialTheme.colorScheme.onSurface) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.Work,
- contentDescription = stringResource(Res.string.role),
- text = role,
- style = MaterialTheme.typography.labelSmall,
- contentColor = contentColor,
- )
-}
-
-@Composable
-fun NodeIdInfo(id: String, modifier: Modifier = Modifier, contentColor: Color = MaterialTheme.colorScheme.onSurface) {
- IconInfo(
- modifier = modifier,
- icon = Icons.Rounded.Fingerprint,
- contentDescription = stringResource(Res.string.node_id),
- text = id,
- style = MaterialTheme.typography.labelSmall,
- contentColor = contentColor,
- )
-}
diff --git a/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoSignalTest_748aa731_0.png b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoSignalTest_748aa731_0.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoSignalTest_748aa731_0.png differ
diff --git a/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoSimpleTest_748aa731_0.png b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoSimpleTest_748aa731_0.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoSimpleTest_748aa731_0.png differ
diff --git a/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoStatusTest_748aa731_0.png b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoStatusTest_748aa731_0.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoStatusTest_748aa731_0.png differ
diff --git a/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_1.png b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_1.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_1.png differ
diff --git a/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_2.png b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_2.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_2.png differ
diff --git a/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_3.png b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_3.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_3.png differ
diff --git a/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_4.png b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_4.png
new file mode 100644
index 000000000..bd0192643
Binary files /dev/null and b/feature/node/src/screenshotTestFdroidDebug/reference/org/meshtastic/feature/node/NodeItemScreenshotTest/NodeInfoTest_748aa731_41783942_4.png differ