Co-authored-by: M57 <m57@hermes-control.app>
This commit is contained in:
1 parent
1870e4bb01
commit
29b630a2ec
9 files changed
+207
-48
No files matched your search
@@ -68,6 +68,8 @@ val StatusYellowContainer = Color(0xFF3D2F0F)
|
||||
val StatusBlue = Color(0xFF4DA8FF)
|
||||
val StatusBlueContainer = Color(0xFF0F2A3D)
|
||||
val StatusGrey = Color(0xFF9E9E9E)
|
||||
val StatusGreyDark = Color(0xFF1A1A24)
|
||||
val StatusGreyLight = Color(0xFFF5F5F5)
|
||||
|
||||
// ── Chat-specific colours (always brand-defined for consistency) ───────
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.m57.hermescontrol.theme
|
||||
|
||||
import androidx.compose.runtime.staticCompositionLocalOf
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.luminance
|
||||
|
||||
/**
|
||||
* Semantic status colour set — always brand-defined (never dynamic).
|
||||
@@ -16,25 +17,58 @@ import androidx.compose.ui.graphics.Color
|
||||
data class HermesStatusColors(
|
||||
val success: Color,
|
||||
val successContainer: Color,
|
||||
val onSuccess: Color,
|
||||
val warning: Color,
|
||||
val warningContainer: Color,
|
||||
val onWarning: Color,
|
||||
val error: Color,
|
||||
val errorContainer: Color,
|
||||
val onError: Color,
|
||||
val info: Color,
|
||||
val infoContainer: Color,
|
||||
val onInfo: Color,
|
||||
val neutral: Color = StatusGrey,
|
||||
)
|
||||
|
||||
/**
|
||||
* Theme-aware colors for markdown/search highlighting. Built per-composition from
|
||||
* [LocalHermesStatusColors] so `==mark==` and search terms follow the active preset
|
||||
* instead of a fixed yellow.
|
||||
*/
|
||||
data class SearchHighlightColors(
|
||||
val markupBackground: Color,
|
||||
val searchBackground: Color,
|
||||
val searchForeground: Color,
|
||||
val currentSearchBackground: Color,
|
||||
val currentSearchForeground: Color,
|
||||
)
|
||||
|
||||
/** Build the highlight palette for the current theme preset. */
|
||||
internal fun onColorFor(color: Color): Color = if (color.luminance() > 0.5f) StatusGreyDark else StatusGreyLight
|
||||
|
||||
internal fun searchHighlightColors(statusColors: HermesStatusColors): SearchHighlightColors =
|
||||
SearchHighlightColors(
|
||||
markupBackground = statusColors.warning.copy(alpha = 0.3f),
|
||||
searchBackground = statusColors.warningContainer,
|
||||
searchForeground = onColorFor(statusColors.warningContainer),
|
||||
currentSearchBackground = statusColors.warning,
|
||||
currentSearchForeground = statusColors.onWarning,
|
||||
)
|
||||
|
||||
val LocalHermesStatusColors =
|
||||
staticCompositionLocalOf {
|
||||
HermesStatusColors(
|
||||
success = StatusGreen,
|
||||
successContainer = StatusGreenContainer,
|
||||
onSuccess = StatusGreyLight,
|
||||
warning = StatusYellow,
|
||||
warningContainer = StatusYellowContainer,
|
||||
onWarning = StatusGreyLight,
|
||||
error = StatusRed,
|
||||
errorContainer = StatusRedContainer,
|
||||
onError = StatusGreyLight,
|
||||
info = StatusBlue,
|
||||
infoContainer = StatusBlueContainer,
|
||||
onInfo = StatusGreyLight,
|
||||
)
|
||||
}
|
||||
@@ -339,12 +339,16 @@ fun HermesControlTheme(
|
||||
HermesStatusColors(
|
||||
success = Color(0xFFB8BB26),
|
||||
successContainer = Color(0xFF32302F),
|
||||
onSuccess = Color(0xFF282828),
|
||||
warning = Color(0xFFFABD2F),
|
||||
warningContainer = Color(0xFF3C3836),
|
||||
onWarning = Color(0xFF282828),
|
||||
error = Color(0xFFFB4934),
|
||||
errorContainer = Color(0xFF282828),
|
||||
onError = Color(0xFF282828),
|
||||
info = Color(0xFF83A598),
|
||||
infoContainer = Color(0xFF3C3836),
|
||||
onInfo = Color(0xFF282828),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -352,12 +356,16 @@ fun HermesControlTheme(
|
||||
HermesStatusColors(
|
||||
success = Color(0xFF98971A),
|
||||
successContainer = Color(0xFFEBDBB2),
|
||||
onSuccess = Color(0xFFEBDBB2),
|
||||
warning = Color(0xFFD79921),
|
||||
warningContainer = Color(0xFFEBDBB2),
|
||||
onWarning = Color(0xFFEBDBB2),
|
||||
error = Color(0xFFCC241D),
|
||||
errorContainer = Color(0xFFEBDBB2),
|
||||
onError = Color(0xFFEBDBB2),
|
||||
info = Color(0xFF458588),
|
||||
infoContainer = Color(0xFFEBDBB2),
|
||||
onInfo = Color(0xFFEBDBB2),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -365,12 +373,16 @@ fun HermesControlTheme(
|
||||
HermesStatusColors(
|
||||
success = Color(0xFFA6E3A1),
|
||||
successContainer = Color(0xFF313244),
|
||||
onSuccess = Color(0xFF11111B),
|
||||
warning = Color(0xFFF9E2AF),
|
||||
warningContainer = Color(0xFF313244),
|
||||
onWarning = Color(0xFF11111B),
|
||||
error = Color(0xFFF38BA8),
|
||||
errorContainer = Color(0xFF313244),
|
||||
onError = Color(0xFF11111B),
|
||||
info = Color(0xFF89B4FA),
|
||||
infoContainer = Color(0xFF313244),
|
||||
onInfo = Color(0xFF11111B),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -378,12 +390,16 @@ fun HermesControlTheme(
|
||||
HermesStatusColors(
|
||||
success = Color(0xFF40A02B),
|
||||
successContainer = Color(0xFFE6E9EF),
|
||||
onSuccess = Color(0xFFE6E9EF),
|
||||
warning = Color(0xFFDF8E1D),
|
||||
warningContainer = Color(0xFFE6E9EF),
|
||||
onWarning = Color(0xFFE6E9EF),
|
||||
error = Color(0xFFD20F39),
|
||||
errorContainer = Color(0xFFE6E9EF),
|
||||
onError = Color(0xFFE6E9EF),
|
||||
info = Color(0xFF1E66F5),
|
||||
infoContainer = Color(0xFFE6E9EF),
|
||||
onInfo = Color(0xFFE6E9EF),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -391,12 +407,16 @@ fun HermesControlTheme(
|
||||
HermesStatusColors(
|
||||
success = Color(0xFF6FEA8B),
|
||||
successContainer = Color(0xFF0A3A14),
|
||||
onSuccess = Color(0xFF0F0B1A),
|
||||
warning = Color(0xFFFFB347),
|
||||
warningContainer = Color(0xFF3A2000),
|
||||
onWarning = Color(0xFF0F0B1A),
|
||||
error = Color(0xFFFF3D68),
|
||||
errorContainer = Color(0xFF3A0A14),
|
||||
onError = Color(0xFF0F0B1A),
|
||||
info = Color(0xFF60F0FF),
|
||||
infoContainer = Color(0xFF003B40),
|
||||
onInfo = Color(0xFF0F0B1A),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -404,12 +424,16 @@ fun HermesControlTheme(
|
||||
HermesStatusColors(
|
||||
success = Color(0xFF1B873A),
|
||||
successContainer = Color(0xFFD7F5E0),
|
||||
onSuccess = Color(0xFFFDF8FF),
|
||||
warning = Color(0xFFB87800),
|
||||
warningContainer = Color(0xFFFFEAB3),
|
||||
onWarning = Color(0xFFFDF8FF),
|
||||
error = Color(0xFFB3261E),
|
||||
errorContainer = Color(0xFFF9DEDC),
|
||||
onError = Color(0xFFFDF8FF),
|
||||
info = Color(0xFF2E6FBD),
|
||||
infoContainer = Color(0xFFD4E7FF),
|
||||
onInfo = Color(0xFFFDF8FF),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -417,12 +441,16 @@ fun HermesControlTheme(
|
||||
HermesStatusColors(
|
||||
success = StatusGreen,
|
||||
successContainer = StatusGreenContainer,
|
||||
onSuccess = StatusGreyLight,
|
||||
warning = StatusYellow,
|
||||
warningContainer = StatusYellowContainer,
|
||||
onWarning = StatusGreyLight,
|
||||
error = StatusRed,
|
||||
errorContainer = StatusRedContainer,
|
||||
onError = StatusGreyLight,
|
||||
info = StatusBlue,
|
||||
infoContainer = StatusBlueContainer,
|
||||
onInfo = StatusGreyLight,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -430,12 +458,16 @@ fun HermesControlTheme(
|
||||
HermesStatusColors(
|
||||
success = Color(0xFF1B873A),
|
||||
successContainer = Color(0xFFD7F5E0),
|
||||
onSuccess = Color(0xFFFDF8FF),
|
||||
warning = HermesAmberDark,
|
||||
warningContainer = Color(0xFFFFEAB3),
|
||||
onWarning = Color(0xFFFDF8FF),
|
||||
error = Color(0xFFB3261E),
|
||||
errorContainer = Color(0xFFF9DEDC),
|
||||
onError = Color(0xFFFDF8FF),
|
||||
info = Color(0xFF2E6FBD),
|
||||
infoContainer = Color(0xFFD4E7FF),
|
||||
onInfo = Color(0xFFFDF8FF),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user