leptos_use/
use_preferred_contrast.rs1use crate::use_media_query;
2use leptos::prelude::*;
3use leptos::reactive::wrappers::read::Signal;
4use std::fmt::Display;
5
6pub fn use_preferred_contrast() -> Signal<PreferredContrast> {
33 let is_more = use_media_query("(prefers-contrast: more)");
34 let is_less = use_media_query("(prefers-contrast: less)");
35 let is_custom = use_media_query("(prefers-contrast: custom)");
36
37 Signal::derive(move || {
38 if is_more.get() {
39 PreferredContrast::More
40 } else if is_less.get() {
41 PreferredContrast::Less
42 } else if is_custom.get() {
43 PreferredContrast::Custom
44 } else {
45 PreferredContrast::NoPreference
46 }
47 })
48}
49
50#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
52pub enum PreferredContrast {
53 More,
54 Less,
55 Custom,
56 #[default]
57 NoPreference,
58}
59impl Display for PreferredContrast {
60 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
61 match self {
62 PreferredContrast::More => write!(f, "more"),
63 PreferredContrast::Less => write!(f, "less"),
64 PreferredContrast::Custom => write!(f, "custom"),
65 PreferredContrast::NoPreference => write!(f, "no-preference"),
66 }
67 }
68}