Skip to main content

egui_components_theme/
palette.rs

1//! Tailwind-style color palette (subset matching gpui-component defaults).
2//!
3//! Hex values come from `gpui-component/crates/ui/src/theme/default-colors.json`.
4
5use egui::Color32;
6
7const fn rgb(r: u8, g: u8, b: u8) -> Color32 {
8    Color32::from_rgb(r, g, b)
9}
10
11/// Eleven-stop Tailwind color scale (50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950).
12#[derive(Clone, Copy)]
13pub struct Scale(pub [Color32; 11]);
14
15impl Scale {
16    pub const fn get(&self, step: u16) -> Color32 {
17        match step {
18            50 => self.0[0],
19            100 => self.0[1],
20            200 => self.0[2],
21            300 => self.0[3],
22            400 => self.0[4],
23            500 => self.0[5],
24            600 => self.0[6],
25            700 => self.0[7],
26            800 => self.0[8],
27            900 => self.0[9],
28            950 => self.0[10],
29            _ => self.0[5],
30        }
31    }
32}
33
34pub const NEUTRAL: Scale = Scale([
35    rgb(250, 250, 250),
36    rgb(245, 245, 245),
37    rgb(229, 229, 229),
38    rgb(212, 212, 212),
39    rgb(163, 163, 163),
40    rgb(115, 115, 115),
41    rgb(82, 82, 82),
42    rgb(64, 64, 64),
43    rgb(38, 38, 38),
44    rgb(23, 23, 23),
45    rgb(10, 10, 10),
46]);
47
48pub const SLATE: Scale = Scale([
49    rgb(248, 250, 252),
50    rgb(241, 245, 249),
51    rgb(226, 232, 240),
52    rgb(203, 213, 225),
53    rgb(148, 163, 184),
54    rgb(100, 116, 139),
55    rgb(71, 85, 105),
56    rgb(51, 65, 85),
57    rgb(30, 41, 59),
58    rgb(15, 23, 42),
59    rgb(2, 6, 23),
60]);
61
62pub const GRAY: Scale = Scale([
63    rgb(249, 250, 251),
64    rgb(243, 244, 246),
65    rgb(229, 231, 235),
66    rgb(209, 213, 219),
67    rgb(156, 163, 175),
68    rgb(107, 114, 128),
69    rgb(75, 85, 99),
70    rgb(55, 65, 81),
71    rgb(31, 41, 55),
72    rgb(17, 24, 39),
73    rgb(3, 7, 18),
74]);
75
76pub const RED: Scale = Scale([
77    rgb(254, 242, 242),
78    rgb(254, 226, 226),
79    rgb(254, 202, 202),
80    rgb(252, 165, 165),
81    rgb(248, 113, 113),
82    rgb(239, 68, 68),
83    rgb(220, 38, 38),
84    rgb(185, 28, 28),
85    rgb(153, 27, 27),
86    rgb(127, 29, 29),
87    rgb(69, 10, 10),
88]);
89
90pub const GREEN: Scale = Scale([
91    rgb(240, 253, 244),
92    rgb(220, 252, 231),
93    rgb(187, 247, 208),
94    rgb(134, 239, 172),
95    rgb(74, 222, 128),
96    rgb(34, 197, 94),
97    rgb(22, 163, 74),
98    rgb(21, 128, 61),
99    rgb(22, 101, 52),
100    rgb(20, 83, 45),
101    rgb(5, 46, 22),
102]);
103
104pub const BLUE: Scale = Scale([
105    rgb(239, 246, 255),
106    rgb(219, 234, 254),
107    rgb(191, 219, 254),
108    rgb(147, 197, 253),
109    rgb(96, 165, 250),
110    rgb(59, 130, 246),
111    rgb(37, 99, 235),
112    rgb(29, 78, 216),
113    rgb(30, 64, 175),
114    rgb(30, 58, 138),
115    rgb(23, 37, 84),
116]);
117
118pub const YELLOW: Scale = Scale([
119    rgb(254, 252, 232),
120    rgb(254, 249, 195),
121    rgb(254, 240, 138),
122    rgb(253, 224, 71),
123    rgb(250, 204, 21),
124    rgb(234, 179, 8),
125    rgb(202, 138, 4),
126    rgb(161, 98, 7),
127    rgb(133, 77, 14),
128    rgb(113, 63, 18),
129    rgb(66, 32, 6),
130]);
131
132pub const CYAN: Scale = Scale([
133    rgb(236, 254, 255),
134    rgb(207, 250, 254),
135    rgb(165, 243, 252),
136    rgb(103, 232, 249),
137    rgb(34, 211, 238),
138    rgb(6, 182, 212),
139    rgb(8, 145, 178),
140    rgb(14, 116, 144),
141    rgb(21, 94, 117),
142    rgb(22, 78, 99),
143    rgb(8, 51, 68),
144]);
145
146pub const PURPLE: Scale = Scale([
147    rgb(250, 245, 255),
148    rgb(243, 232, 255),
149    rgb(233, 213, 255),
150    rgb(216, 180, 254),
151    rgb(192, 132, 252),
152    rgb(168, 85, 247),
153    rgb(147, 51, 234),
154    rgb(126, 34, 206),
155    rgb(107, 33, 168),
156    rgb(88, 28, 135),
157    rgb(59, 7, 100),
158]);
159
160pub const WHITE: Color32 = Color32::WHITE;
161pub const BLACK: Color32 = Color32::BLACK;