Skip to main content

rosace_theme/
spacing.rs

1//! Spacing tokens — the standard set of logical-pixel gaps used across the UI.
2
3/// Named spacing values in logical pixels.
4#[derive(Debug, Clone, Copy)]
5pub struct Spacing {
6    /// Extra-small gap (4 px).
7    pub xs: f32,
8    /// Small gap (8 px).
9    pub sm: f32,
10    /// Medium gap (16 px).
11    pub md: f32,
12    /// Large gap (24 px).
13    pub lg: f32,
14    /// Extra-large gap (32 px).
15    pub xl: f32,
16    /// Double extra-large gap (48 px).
17    pub xxl: f32,
18}
19
20impl Default for Spacing {
21    fn default() -> Self {
22        Self {
23            xs: 4.0,
24            sm: 8.0,
25            md: 16.0,
26            lg: 24.0,
27            xl: 32.0,
28            xxl: 48.0,
29        }
30    }
31}
32
33// ---------------------------------------------------------------------------
34// Tests
35// ---------------------------------------------------------------------------
36
37#[cfg(test)]
38mod tests {
39    use super::*;
40
41    #[test]
42    fn spacing_defaults_are_correct() {
43        let s = Spacing::default();
44        assert_eq!(s.xs, 4.0);
45        assert_eq!(s.sm, 8.0);
46        assert_eq!(s.md, 16.0);
47        assert_eq!(s.lg, 24.0);
48        assert_eq!(s.xl, 32.0);
49        assert_eq!(s.xxl, 48.0);
50    }
51
52    #[test]
53    fn spacing_values_are_ascending() {
54        let s = Spacing::default();
55        assert!(s.xs < s.sm);
56        assert!(s.sm < s.md);
57        assert!(s.md < s.lg);
58        assert!(s.lg < s.xl);
59        assert!(s.xl < s.xxl);
60    }
61}