fingerprintjs
33 строки · 961.0 Байт
1export const enum ContrastPreference {
2Less = -1,
3None = 0,
4More = 1,
5// "Max" can be added in future
6ForcedColors = 10,
7}
8
9/**
10* @see https://www.w3.org/TR/mediaqueries-5/#prefers-contrast
11* @see https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-contrast
12*/
13export default function getContrastPreference(): number | undefined {
14if (doesMatch('no-preference')) {
15return ContrastPreference.None
16}
17// The sources contradict on the keywords. Probably 'high' and 'low' will never be implemented.
18// Need to check it when all browsers implement the feature.
19if (doesMatch('high') || doesMatch('more')) {
20return ContrastPreference.More
21}
22if (doesMatch('low') || doesMatch('less')) {
23return ContrastPreference.Less
24}
25if (doesMatch('forced')) {
26return ContrastPreference.ForcedColors
27}
28return undefined
29}
30
31function doesMatch(value: string) {
32return matchMedia(`(prefers-contrast: ${value})`).matches
33}
34