DeviceList
fun DeviceList(connectionState: ConnectionState, selectedDevice: String, bleDevices: List<DeviceListEntry>, usbDevices: List<DeviceListEntry>, discoveredTcpDevices: List<DeviceListEntry>, recentTcpDevices: List<DeviceListEntry>, isBleScanning: Boolean, isNetworkScanning: Boolean, activeTransport: DeviceType, onSelectDevice: (DeviceListEntry) -> Unit, onToggleBleScan: () -> Unit, onToggleNetworkScan: () -> Unit, onAddManualAddress: (address: String, fullAddress: String) -> Unit, onRemoveRecentAddress: (DeviceListEntry) -> Unit, modifier: Modifier = Modifier)(source)
Unified device list: one selected BLE / Network / USB pane rendered as a scrollable LazyColumn.
Every pane uses the same M3 header template (DeviceSectionHeader). Stable per-transport keys (e.g. "ble:<fullAddress>") keep LazyColumn's recomposition scope tight to the actual item that changed when a user taps a device card.
BLE / network scanning is user-triggered — the header's trailing toggle calls back to the caller.