M7: polish + E2E + docs (layout pass, theming, states, e2e driver, schema, setup.md, security)

This commit is contained in:
ARIA committed 2026-08-20 12:00:13 +02:00
1 parent 0cc8b7aafe
commit bf6bf7e8bd
26 files changed
+2225 -327

No files matched your search

@@ -1,9 +1,7 @@
package iris
import androidx.compose.foundation.background
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.darkColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
@@ -11,21 +9,16 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import iris.data.SecureStore
import iris.net.GatewayClient
import iris.platform.setActiveController
import iris.state.IrisController
import iris.ui.screens.ChatScreen
import iris.ui.screens.ConnectScreen
private val IrisDark = darkColorScheme(
background = Color(0xFF1B1E28),
surface = Color(0xFF222634),
onBackground = Color(0xFFE8EAF0),
onSurface = Color(0xFFE8EAF0),
primary = Color(0xFF4F7CFF),
)
import iris.ui.screens.ConnectingScreen
import iris.ui.theme.IrisColors
import iris.ui.theme.IrisTheme
import iris.util.hostFromUrl
/**
* Root composable shared by the Android and Desktop shells.
@@ -57,8 +50,8 @@ fun IrisApp(
}
val state by controller.client.state.collectAsState()
MaterialTheme(colorScheme = IrisDark) {
Surface(modifier = Modifier.background(IrisDark.background)) {
IrisTheme {
Surface(modifier = Modifier.background(IrisColors.background)) {
val s = state
when (s) {
GatewayClient.State.Disconnected ->
@@ -70,6 +63,9 @@ fun IrisApp(
prefillToken = store.token,
initialError = "Pairing rejected: ${s.message}",
)
// M7: initial connect in flight — dedicated screen, not an empty chat.
GatewayClient.State.Connecting ->
ConnectingScreen(hostFromUrl(store.serverUrl))
else -> ChatScreen(controller)
}
}