colorizr
Version:
Manipulate colors like a boss
27 lines (23 loc) • 834 B
text/typescript
import getLuminance from '~/luminance';
import { MESSAGES } from '~/modules/constants';
import { invariant } from '~/modules/invariant';
import { round } from '~/modules/utils';
import { isString } from '~/modules/validators';
/**
* Get the contrast ratio between 2 colors.
*
* @param left - The first color string.
* @param right - The second color string.
* @returns The contrast ratio (1-21).
*/
export default function contrast(left: string, right: string): number {
invariant(isString(left), MESSAGES.left);
invariant(isString(right), MESSAGES.right);
const LuminanceLeft = getLuminance(left);
const LuminanceRight = getLuminance(right);
return round(
LuminanceLeft >= LuminanceRight
? (LuminanceLeft + 0.05) / (LuminanceRight + 0.05)
: (LuminanceRight + 0.05) / (LuminanceLeft + 0.05),
);
}