42 lines
923 B
TypeScript
42 lines
923 B
TypeScript
import { isValidStr } from './string-helper';
|
||
|
||
/**
|
||
* 解析配色方案,优先dark模式
|
||
*/
|
||
export function parseColorScheme(colorScheme: string): {
|
||
isDarkMode: boolean;
|
||
extraSchemeName: string | null;
|
||
} {
|
||
if (colorScheme === 'dark') {
|
||
return {
|
||
isDarkMode: true,
|
||
extraSchemeName: null,
|
||
};
|
||
} else if (colorScheme === 'light') {
|
||
return {
|
||
isDarkMode: false,
|
||
extraSchemeName: null,
|
||
};
|
||
} else if (colorScheme === 'auto') {
|
||
return {
|
||
isDarkMode: window.matchMedia
|
||
? window.matchMedia('(prefers-color-scheme: dark)').matches
|
||
: true,
|
||
extraSchemeName: null,
|
||
};
|
||
} else {
|
||
// 可能是插件 for example: dark+miku
|
||
let [base, name] = colorScheme.split('+');
|
||
|
||
if (!isValidStr(name)) {
|
||
name = base;
|
||
base = 'dark';
|
||
}
|
||
|
||
return {
|
||
isDarkMode: base === 'dark',
|
||
extraSchemeName: `theme-${name}`,
|
||
};
|
||
}
|
||
}
|