plugins { alias(libs.plugins.architecture.android.library) alias(libs.plugins.architecture.koin) alias(libs.plugins.architecture.android.unit.test) } // UI-agnostic presentation: the MVI ViewModel + State/Action/Event live here and are shared by // BOTH the Compose and the Views renderers. No Compose, no Views dependencies on purpose. android { namespace = "com.example.architecture.feature.characters.presentation" } dependencies { implementation(project(":core:domain")) implementation(project(":core:presentation")) implementation(project(":feature:characters:domain")) implementation(libs.androidx.lifecycle.viewmodel.ktx) implementation(libs.androidx.lifecycle.viewmodel.savedstate) implementation(libs.kotlinx.coroutines.android) // Stable collection for state — makes the list Compose-stable WITHOUT a Compose dependency, // so this module stays UI-agnostic (no @Stable annotation, which would require compose-runtime). // `api` because CharacterListState.characters exposes ImmutableList in the public state API. api(libs.kotlinx.collections.immutable) }