mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-04-11 16:19:27 -07:00
feat(subtitle-sidebar): add sidebar config surface (#28)
This commit is contained in:
@@ -15,6 +15,22 @@ export function asBoolean(value: unknown): boolean | undefined {
|
||||
}
|
||||
|
||||
const hexColorPattern = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
|
||||
const cssColorKeywords = new Set([
|
||||
'transparent',
|
||||
'currentcolor',
|
||||
'inherit',
|
||||
'initial',
|
||||
'unset',
|
||||
'revert',
|
||||
'revert-layer',
|
||||
]);
|
||||
const cssColorFunctionPattern = /^(?:rgba?|hsla?)\(\s*[^()]+?\s*\)$/i;
|
||||
|
||||
function supportsCssColor(text: string): boolean {
|
||||
const css = (globalThis as { CSS?: { supports?: (property: string, value: string) => boolean } })
|
||||
.CSS;
|
||||
return css?.supports?.('color', text) ?? false;
|
||||
}
|
||||
|
||||
export function asColor(value: unknown): string | undefined {
|
||||
if (typeof value !== 'string') return undefined;
|
||||
@@ -22,6 +38,30 @@ export function asColor(value: unknown): string | undefined {
|
||||
return hexColorPattern.test(text) ? text : undefined;
|
||||
}
|
||||
|
||||
export function asCssColor(value: unknown): string | undefined {
|
||||
if (typeof value !== 'string') return undefined;
|
||||
|
||||
const text = value.trim();
|
||||
if (text.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (supportsCssColor(text)) {
|
||||
return text;
|
||||
}
|
||||
|
||||
const normalized = text.toLowerCase();
|
||||
if (
|
||||
hexColorPattern.test(text) ||
|
||||
cssColorKeywords.has(normalized) ||
|
||||
cssColorFunctionPattern.test(text)
|
||||
) {
|
||||
return text;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function asFrequencyBandedColors(
|
||||
value: unknown,
|
||||
): [string, string, string, string, string] | undefined {
|
||||
|
||||
Reference in New Issue
Block a user