Skip to main content

vertigo_cmark/
styling.rs

1use vertigo::Css;
2
3#[derive(Clone)]
4pub struct CMarkStyle {
5    pub blockquote: Css,
6    pub codeblock: Css,
7    pub container: Css,
8    pub dd: Css,
9    pub del: Css,
10    pub dl: Css,
11    pub dt: Css,
12    pub em: Css,
13    pub h1: Css,
14    pub h2: Css,
15    pub h3: Css,
16    pub h4: Css,
17    pub h5: Css,
18    pub h6: Css,
19    pub img: Css,
20    pub li: Css,
21    pub a: Css,
22    pub ol: Css,
23    pub p: Css,
24    pub strong: Css,
25    pub sub: Css,
26    pub sup: Css,
27    pub table: Css,
28    pub tbody: Css,
29    pub td: Css,
30    pub th: Css,
31    pub thead: Css,
32    pub tr: Css,
33    pub ul: Css,
34}
35
36impl Default for CMarkStyle {
37    fn default() -> Self {
38        Self {
39            blockquote: Css::default(),
40            codeblock: Css::default(),
41            container: Css::default(),
42            dd: Css::default(),
43            del: Css::default(),
44            dl: Css::default(),
45            dt: Css::default(),
46            em: Css::default(),
47            h1: Css::default(),
48            h2: Css::default(),
49            h3: Css::default(),
50            h4: Css::default(),
51            h5: Css::default(),
52            h6: Css::default(),
53            img: Css::default(),
54            li: Css::default(),
55            a: Css::default(),
56            ol: Css::default(),
57            p: Css::default(),
58            strong: Css::default(),
59            sub: Css::default(),
60            sup: Css::default(),
61            table: Css::str("border: 1"),
62            tbody: Css::default(),
63            td: Css::default(),
64            th: Css::default(),
65            thead: Css::default(),
66            tr: Css::default(),
67            ul: Css::default(),
68        }
69    }
70}
71
72impl CMarkStyle {
73    /// Returns a style preset that restores browser-default typography,
74    /// suitable for use when Tailwind preflight has reset all element styles.
75    pub fn browser_defaults() -> Self {
76        Self {
77            p: Css::str("margin: 0.75em 0; line-height: 1.6;"),
78            h1: Css::str("font-size: 2em;     font-weight: 700; margin: 0.67em 0;"),
79            h2: Css::str("font-size: 1.5em;   font-weight: 700; margin: 0.75em 0;"),
80            h3: Css::str("font-size: 1.25em;  font-weight: 600; margin: 0.83em 0;"),
81            h4: Css::str("font-size: 1.1em;   font-weight: 600; margin: 0.83em 0;"),
82            h5: Css::str("font-size: 1em;     font-weight: 600; margin: 0.83em 0;"),
83            h6: Css::str("font-size: 0.875em; font-weight: 600; margin: 0.83em 0; color: #6b7280;"),
84            ul: Css::str("list-style-type: disc;    padding-left: 1.5em; margin: 0.5em 0;"),
85            ol: Css::str("list-style-type: decimal; padding-left: 1.5em; margin: 0.5em 0;"),
86            li: Css::str("margin: 0.25em 0;"),
87            blockquote: Css::str(
88                "border-left: 4px solid #d1d5db; padding-left: 1em; margin: 0.75em 0; color: #6b7280; font-style: italic;",
89            ),
90            codeblock: Css::str(
91                "background: #f3f4f6; border-radius: 0.375em; padding: 0.75em 1em; overflow-x: auto; font-family: monospace; font-size: 0.875em; margin: 0.75em 0; display: block;",
92            ),
93            a: Css::str("color: #4f46e5; text-decoration: underline;"),
94            strong: Css::str("font-weight: 700;"),
95            em: Css::str("font-style: italic;"),
96            table: Css::str("border-collapse: collapse; width: 100%; margin: 0.75em 0; border: 1"),
97            th: Css::str(
98                "border: 1px solid #d1d5db; padding: 0.5em 0.75em; background: #f9fafb; font-weight: 600; text-align: left;",
99            ),
100            td: Css::str("border: 1px solid #d1d5db; padding: 0.5em 0.75em;"),
101            ..Self::default()
102        }
103    }
104}