Skip to main content

wasm_toolkit/document_ops/
css_variables.rs

1use wasm_bindgen::JsCast;
2use web_sys::{CssStyleDeclaration, Element, HtmlElement};
3
4use crate::{WasmDocument, WasmToolkitError, WasmToolkitResult};
5
6impl WasmDocument {
7    pub fn get_document_element(&self) -> WasmToolkitResult<Element> {
8        self.inner()
9            .document_element()
10            .ok_or(WasmToolkitError::MissingDocumentElement)
11    }
12
13    pub fn get_document_html_element(&self) -> WasmToolkitResult<HtmlElement> {
14        self.get_document_element()?
15            .dyn_into::<HtmlElement>()
16            .or(Err(WasmToolkitError::UnableToCastElementToHtmlElement))
17    }
18
19    pub fn root_css(&self) -> WasmToolkitResult<CssStyleDeclaration> {
20        Ok(self.get_document_html_element()?.style())
21    }
22
23    pub fn set_css_variable(&self, key: &str, value: &str) -> WasmToolkitResult<()> {
24        self.root_css()?
25            .set_property(key, value)
26            .or(Err(WasmToolkitError::UnableToSetCssProperty))
27    }
28
29    pub fn set_background_color(&self, value: &str) -> WasmToolkitResult<()> {
30        self.set_css_variable("--background-color", value)
31    }
32
33    pub fn set_background_color_pitch_black(&self) -> WasmToolkitResult<()> {
34        self.set_css_variable("--background-color", "#000000")
35    }
36
37    pub fn set_background_color_system_dark(&self) -> WasmToolkitResult<()> {
38        self.set_background_color_pitch_black()
39    }
40
41    pub fn set_background_color_system_light(&self) -> WasmToolkitResult<()> {
42        self.set_css_variable("--background-color", "#1a1a1a")
43    }
44
45    pub fn set_primary_color(&self, value: &str) -> WasmToolkitResult<()> {
46        self.set_css_variable("--primary-color", value)
47    }
48
49    pub fn set_secondary_color(&self, value: &str) -> WasmToolkitResult<()> {
50        self.set_css_variable("--secondary-color", value)
51    }
52
53    pub fn set_accent_color(&self, value: &str) -> WasmToolkitResult<()> {
54        self.set_css_variable("--accent-color", value)
55    }
56
57    pub fn set_font_sans(&self, value: &str) -> WasmToolkitResult<()> {
58        self.set_css_variable("--font-sans", value)
59    }
60
61    pub fn set_font_mono(&self, value: &str) -> WasmToolkitResult<()> {
62        self.set_css_variable("--font-mono", value)
63    }
64}