Skip to main content

vtcode_design/
constants.rs

1//! Shared design constants: ellipses, layout breakpoints, spacing tokens.
2//!
3//! These constants are the single source of truth for UI values that were
4//! previously scattered across multiple crates.
5
6/// Unicode ellipsis character as a string (`\u{2026}`).
7pub const ELLIPSIS: &str = "\u{2026}";
8
9/// Unicode ellipsis character.
10pub const ELLIPSIS_CHAR: char = '\u{2026}';
11
12/// Three-dot ASCII fallback ellipsis.
13pub const ELLIPSIS_ASCII: &str = "...";
14
15/// Alias used by preview contexts. Delegates to [`ELLIPSIS`].
16pub const INLINE_PREVIEW_ELLIPSIS: &str = ELLIPSIS;
17
18// ── Layout breakpoints ──────────────────────────────────────────────────────
19
20/// Maximum column width for compact layout mode.
21pub const COMPACT_MAX_COLS: u16 = 80;
22
23/// Maximum row height for compact layout mode.
24pub const COMPACT_MAX_ROWS: u16 = 20;
25
26/// Minimum column width for wide layout mode.
27pub const WIDE_MIN_COLS: u16 = 120;
28
29/// Minimum row height for wide layout mode.
30pub const WIDE_MIN_ROWS: u16 = 24;
31
32// ── Spacing tokens ──────────────────────────────────────────────────────────
33
34/// Tight spacing (1 cell).
35pub const SPACING_TIGHT: u16 = 1;
36
37/// Normal spacing (2 cells).
38pub const SPACING_NORMAL: u16 = 2;
39
40/// Loose spacing (4 cells).
41pub const SPACING_LOOSE: u16 = 4;
42
43#[cfg(test)]
44mod tests {
45    use super::*;
46
47    #[test]
48    fn ellipsis_is_unicode() {
49        assert_eq!(ELLIPSIS, "\u{2026}");
50        assert_eq!(ELLIPSIS.chars().count(), 1);
51        assert_eq!(ELLIPSIS.len(), 3); // UTF-8: 3 bytes
52    }
53
54    #[test]
55    fn ellipsis_char_matches_string() {
56        assert_eq!(ELLIPSIS_CHAR, '\u{2026}');
57        assert_eq!(ELLIPSIS_CHAR.to_string(), ELLIPSIS);
58    }
59
60    #[test]
61    fn ellipsis_ascii_is_three_dots() {
62        assert_eq!(ELLIPSIS_ASCII, "...");
63        assert_eq!(ELLIPSIS_ASCII.len(), 3);
64    }
65
66    #[test]
67    fn preview_ellipsis_delegates() {
68        assert_eq!(INLINE_PREVIEW_ELLIPSIS, ELLIPSIS);
69    }
70
71    #[test]
72    fn layout_breakpoints_are_ordered() {
73        assert!(COMPACT_MAX_COLS < WIDE_MIN_COLS);
74        assert!(COMPACT_MAX_ROWS < WIDE_MIN_ROWS);
75    }
76
77    #[test]
78    fn spacing_tokens_are_ordered() {
79        assert!(SPACING_TIGHT < SPACING_NORMAL);
80        assert!(SPACING_NORMAL < SPACING_LOOSE);
81    }
82}