Compose Custom Colors

Material design 3 custom colors with Jetpack Compose. Harmonization is enabled by default.

alt text

Usage

@Composable
fun Example() {
    CustomColorScheme(color = Color.Yellow) { // darkTheme = isSystemInDarkTheme(), harmonize = true
        Column {
            Item()
        }
    }
}

@Composable
private fun Item(){
    val colorScheme = LocalCustomColorScheme.current

    Surface(
        color = colorScheme.customColorContainer
    ) {
        Text(
            text = "Example item",
            color = colorScheme.onCustomColorContainer
        )
    }
}

Import

In settings.gradle.kts, add maven { setUrl("https://jitpack.io") }.

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()

        maven { setUrl("https://jitpack.io") }
    }
}

Add dependency.

dependencies {
    implementation("com.github.bogdan-pechounov:compose-custom-colors:0.7")
}

Questions

Should selectionColors be updated like in MaterialTheme?

@Composable
fun MaterialTheme(
    colorScheme: ColorScheme = MaterialTheme.colorScheme,
    shapes: Shapes = MaterialTheme.shapes,
    typography: Typography = MaterialTheme.typography,
    content: @Composable () -> Unit
) {
    val rememberedColorScheme = remember {
        // Explicitly creating a new object here so we don't mutate the initial [colorScheme]
        // provided, and overwrite the values set in it.
        colorScheme.copy()
    }.apply {
        updateColorSchemeFrom(colorScheme)
    }
    val rippleIndication = rememberRipple()
    val selectionColors = rememberTextSelectionColors(rememberedColorScheme)
    CompositionLocalProvider(
        LocalColorScheme provides rememberedColorScheme,
        LocalIndication provides rippleIndication,
        LocalRippleTheme provides MaterialRippleTheme,
        LocalShapes provides shapes,
        LocalTextSelectionColors provides selectionColors,
        LocalTypography provides typography,
    ) {
        ProvideTextStyle(value = typography.bodyLarge, content = content)
    }
}

GitHub

View Github