Open bre97-web opened 7 months ago
Why hasn't this pr been processed yet?
I saw someone wondering after calling themeFromSourceColor and then applyTheme, why are the colors such as surfaceContainer missing? If you need to temporarily solve this problem, you can consider the following code:
import { Hct, MaterialDynamicColors, SchemeContent, argbFromHex, hexFromArgb } from "@material/material-color-utilities"
const materialColors = {
primaryPaletteKeyColor: MaterialDynamicColors.primaryPaletteKeyColor,
secondaryPaletteKeyColor: MaterialDynamicColors.secondaryPaletteKeyColor,
tertiaryPaletteKeyColor: MaterialDynamicColors.tertiaryPaletteKeyColor,
neutralPaletteKeyColor: MaterialDynamicColors.neutralPaletteKeyColor,
neutralVariantPaletteKeyColor: MaterialDynamicColors.neutralVariantPaletteKeyColor,
background: MaterialDynamicColors.background,
onBackground: MaterialDynamicColors.onBackground,
surface: MaterialDynamicColors.surface,
surfaceDim: MaterialDynamicColors.surfaceDim,
surfaceBright: MaterialDynamicColors.surfaceBright,
surfaceContainerLowest: MaterialDynamicColors.surfaceContainerLowest,
surfaceContainerLow: MaterialDynamicColors.surfaceContainerLow,
surfaceContainer: MaterialDynamicColors.surfaceContainer,
surfaceContainerHigh: MaterialDynamicColors.surfaceContainerHigh,
surfaceContainerHighest: MaterialDynamicColors.surfaceContainerHighest,
onSurface: MaterialDynamicColors.onSurface,
surfaceVariant: MaterialDynamicColors.surfaceVariant,
onSurfaceVariant: MaterialDynamicColors.onSurfaceVariant,
inverseSurface: MaterialDynamicColors.inverseSurface,
inverseOnSurface: MaterialDynamicColors.inverseOnSurface,
outline: MaterialDynamicColors.outline,
outlineVariant: MaterialDynamicColors.outlineVariant,
shadow: MaterialDynamicColors.shadow,
scrim: MaterialDynamicColors.scrim,
surfaceTint: MaterialDynamicColors.surfaceTint,
primary: MaterialDynamicColors.primary,
onPrimary: MaterialDynamicColors.onPrimary,
primaryContainer: MaterialDynamicColors.primaryContainer,
onPrimaryContainer: MaterialDynamicColors.onPrimaryContainer,
inversePrimary: MaterialDynamicColors.inversePrimary,
secondary: MaterialDynamicColors.secondary,
onSecondary: MaterialDynamicColors.onSecondary,
secondaryContainer: MaterialDynamicColors.secondaryContainer,
onSecondaryContainer: MaterialDynamicColors.onSecondaryContainer,
tertiary: MaterialDynamicColors.tertiary,
onTertiary: MaterialDynamicColors.onTertiary,
tertiaryContainer: MaterialDynamicColors.tertiaryContainer,
onTertiaryContainer: MaterialDynamicColors.onTertiaryContainer,
error: MaterialDynamicColors.error,
onError: MaterialDynamicColors.onError,
errorContainer: MaterialDynamicColors.errorContainer,
onErrorContainer: MaterialDynamicColors.onErrorContainer,
primaryFixed: MaterialDynamicColors.primaryFixed,
primaryFixedDim: MaterialDynamicColors.primaryFixedDim,
onPrimaryFixed: MaterialDynamicColors.onPrimaryFixed,
onPrimaryFixedVariant: MaterialDynamicColors.onPrimaryFixedVariant,
secondaryFixed: MaterialDynamicColors.secondaryFixed,
secondaryFixedDim: MaterialDynamicColors.secondaryFixedDim,
onSecondaryFixed: MaterialDynamicColors.onSecondaryFixed,
onSecondaryFixedVariant: MaterialDynamicColors.onSecondaryFixedVariant,
tertiaryFixed: MaterialDynamicColors.tertiaryFixed,
tertiaryFixedDim: MaterialDynamicColors.tertiaryFixedDim,
onTertiaryFixed: MaterialDynamicColors.onTertiaryFixed,
onTertiaryFixedVariant: MaterialDynamicColors.onTertiaryFixedVariant,
}
export function generateStyleTextBySourceColor(argb: number, isDark: boolean, contrastLevel: number) {
const scheme = new SchemeContent(Hct.fromInt(argb), isDark, contrastLevel)
/**
* ...
* [onSurface, MaterialDynamicColors.onSurface] -> --md-sys-color-on-surface: #ffffff;
* ...
*/
return Object.entries(materialColors).map(e => `--md-sys-color-${toKebabCase(e[0])}: ${hexFromArgb(e[1].getArgb(scheme))};`).reduce((l, c) => l + c)
}
function toKebabCase(str: string) {
return str.split('').map((letter, idx) => {
return letter.toUpperCase() === letter
? `${idx !== 0 ? '-' : ''}${letter.toLowerCase()}`
: letter
}).join('')
}
const styleText = generateStyleTextBySourceColor(argbFromHex('#fe8056'), false, 0);
document.body.setAttribute('style', styleText)
The document.body style:
Surface Containers
Add-ons
Fix values of background, surface and onErrorContainer.