package com.vgmlr.kerf
import androidx.activity.ComponentActivity
import androidx.activity.SystemBarStyle
import androidx.activity.enableEdgeToEdge
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
object KerfDimens {
val PaddingLarge = 16.dp
val TextSizeMedium = 14.sp
val TextSizeLarge = 16.sp
val TextSizeTitle = 18.sp
}
data class KerfColors(
val appTopbar: Color,
val noteHeaderMain: Color,
val noteHeader: Color,
val alertBackground: Color,
val alertText: Color,
val menuBackground: Color,
val menuText: Color
)
val LocalKerfColors = staticCompositionLocalOf<KerfColors?> { null }
@Composable
fun KerfTheme(
content: @Composable () -> Unit
) {
val kerfColors = KerfColors(
appTopbar = colorResource(id = R.color.app_topbar),
noteHeaderMain = colorResource(id = R.color.note_header_main),
noteHeader = colorResource(id = R.color.note_header),
alertBackground = colorResource(id = R.color.alert_background),
alertText = colorResource(id = R.color.alert_text),
menuBackground = colorResource(id = R.color.menu_background),
menuText = colorResource(id = R.color.menu_text)
)
val colors = darkColorScheme(
primary = colorResource(id = R.color.primary_brand),
onPrimary = colorResource(id = R.color.note_title_text),
background = colorResource(id = R.color.app_background),
onBackground = colorResource(id = R.color.note_content_text),
surface = colorResource(id = R.color.note_background),
onSurface = colorResource(id = R.color.note_content_text),
surfaceVariant = colorResource(id = R.color.note_background),
onSurfaceVariant = colorResource(id = R.color.note_content_text)
)
val view = LocalView.current
if (!view.isInEditMode) {
SideEffect {
(view.context as? ComponentActivity)?.enableEdgeToEdge(
statusBarStyle = SystemBarStyle.auto(Color.Transparent.hashCode(), Color.Transparent.hashCode()) { true }
)
}
}
CompositionLocalProvider(LocalKerfColors provides kerfColors) {
MaterialTheme(colorScheme = colors, content = content)
}
}