Files
sofa/lib/utils/title-theme.ts
T
jake a7b3600d15 Flatten lib/types/title.ts → lib/types.ts and update all imports
- Rename `lib/types/title.ts` → `lib/types.ts` (remove nested directory)
- Update all imports across services, atoms, components, and utils
  from `@/lib/types/title` to `@/lib/types`
2026-03-08 12:26:00 -04:00

32 lines
1010 B
TypeScript

import type { ColorPalette } from "@/lib/types";
/** @internal */
export function hexToRelativeLuminance(hex: string): number {
const r = Number.parseInt(hex.slice(1, 3), 16) / 255;
const g = Number.parseInt(hex.slice(3, 5), 16) / 255;
const b = Number.parseInt(hex.slice(5, 7), 16) / 255;
const toLinear = (c: number) =>
c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
return 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);
}
export function getTitleThemeStyle(
palette: ColorPalette | null,
): React.CSSProperties {
const color = palette?.vibrant;
if (!color) return {};
const luminance = hexToRelativeLuminance(color);
const foreground =
luminance > 0.3
? "oklch(0.13 0.006 55)" // dark (current --primary-foreground)
: "oklch(0.93 0.015 80)"; // light (current --foreground)
return {
"--primary": color,
"--ring": color,
"--primary-foreground": foreground,
"--status-watching": color,
} as React.CSSProperties;
}