1#![allow(missing_docs)]
2
3use gpui::Hsla;
4use refineable::Refineable;
5
6use crate::{blue, grass, neutral, red, yellow};
7
8#[derive(Refineable, Clone, Debug, PartialEq)]
9#[refineable(Debug, serde::Deserialize)]
10pub struct StatusColors {
11 /// Indicates some kind of conflict, like a file changed on disk while it was open, or
12 /// merge conflicts in a Git repository.
13 pub conflict: Hsla,
14 pub conflict_background: Hsla,
15 pub conflict_border: Hsla,
16
17 /// Indicates something new, like a new file added to a Git repository.
18 pub created: Hsla,
19 pub created_background: Hsla,
20 pub created_border: Hsla,
21
22 /// Indicates that something no longer exists, like a deleted file.
23 pub deleted: Hsla,
24 pub deleted_background: Hsla,
25 pub deleted_border: Hsla,
26
27 /// Indicates a system error, a failed operation or a diagnostic error.
28 pub error: Hsla,
29 pub error_background: Hsla,
30 pub error_border: Hsla,
31
32 /// Represents a hidden status, such as a file being hidden in a file tree.
33 pub hidden: Hsla,
34 pub hidden_background: Hsla,
35 pub hidden_border: Hsla,
36
37 /// Indicates a hint or some kind of additional information.
38 pub hint: Hsla,
39 pub hint_background: Hsla,
40 pub hint_border: Hsla,
41
42 /// Indicates that something is deliberately ignored, such as a file or operation ignored by Git.
43 pub ignored: Hsla,
44 pub ignored_background: Hsla,
45 pub ignored_border: Hsla,
46
47 /// Represents informational status updates or messages.
48 pub info: Hsla,
49 pub info_background: Hsla,
50 pub info_border: Hsla,
51
52 /// Indicates a changed or altered status, like a file that has been edited.
53 pub modified: Hsla,
54 pub modified_background: Hsla,
55 pub modified_border: Hsla,
56
57 /// Indicates something that is predicted, like automatic code completion, or generated code.
58 pub predictive: Hsla,
59 pub predictive_background: Hsla,
60 pub predictive_border: Hsla,
61
62 /// Represents a renamed status, such as a file that has been renamed.
63 pub renamed: Hsla,
64 pub renamed_background: Hsla,
65 pub renamed_border: Hsla,
66
67 /// Indicates a successful operation or task completion.
68 pub success: Hsla,
69 pub success_background: Hsla,
70 pub success_border: Hsla,
71
72 /// Indicates some kind of unreachable status, like a block of code that can never be reached.
73 pub unreachable: Hsla,
74 pub unreachable_background: Hsla,
75 pub unreachable_border: Hsla,
76
77 /// Represents a warning status, like an operation that is about to fail.
78 pub warning: Hsla,
79 pub warning_background: Hsla,
80 pub warning_border: Hsla,
81}
82
83pub struct DiagnosticColors {
84 pub error: Hsla,
85 pub warning: Hsla,
86 pub info: Hsla,
87}
88
89impl StatusColors {
90 pub fn dark() -> Self {
91 Self {
92 conflict: red().dark().step_9(),
93 conflict_background: red().dark().step_9(),
94 conflict_border: red().dark().step_9(),
95 created: grass().dark().step_9(),
96 created_background: grass().dark().step_9().opacity(0.25),
97 created_border: grass().dark().step_9(),
98 deleted: red().dark().step_9(),
99 deleted_background: red().dark().step_9().opacity(0.25),
100 deleted_border: red().dark().step_9(),
101 error: red().dark().step_9(),
102 error_background: red().dark().step_9(),
103 error_border: red().dark().step_9(),
104 hidden: neutral().dark().step_9(),
105 hidden_background: neutral().dark().step_9(),
106 hidden_border: neutral().dark().step_9(),
107 hint: blue().dark().step_9(),
108 hint_background: blue().dark().step_9(),
109 hint_border: blue().dark().step_9(),
110 ignored: neutral().dark().step_9(),
111 ignored_background: neutral().dark().step_9(),
112 ignored_border: neutral().dark().step_9(),
113 info: blue().dark().step_9(),
114 info_background: blue().dark().step_9(),
115 info_border: blue().dark().step_9(),
116 modified: yellow().dark().step_9(),
117 modified_background: yellow().dark().step_9().opacity(0.25),
118 modified_border: yellow().dark().step_9(),
119 predictive: neutral().dark_alpha().step_9(),
120 predictive_background: neutral().dark_alpha().step_9(),
121 predictive_border: neutral().dark_alpha().step_9(),
122 renamed: blue().dark().step_9(),
123 renamed_background: blue().dark().step_9(),
124 renamed_border: blue().dark().step_9(),
125 success: grass().dark().step_9(),
126 success_background: grass().dark().step_9(),
127 success_border: grass().dark().step_9(),
128 unreachable: neutral().dark().step_10(),
129 unreachable_background: neutral().dark().step_10(),
130 unreachable_border: neutral().dark().step_10(),
131 warning: yellow().dark().step_9(),
132 warning_background: yellow().dark().step_9(),
133 warning_border: yellow().dark().step_9(),
134 }
135 }
136
137 pub fn light() -> Self {
138 Self {
139 conflict: red().light().step_9(),
140 conflict_background: red().light().step_9(),
141 conflict_border: red().light().step_9(),
142 created: grass().light().step_9(),
143 created_background: grass().light().step_9(),
144 created_border: grass().light().step_9(),
145 deleted: red().light().step_9(),
146 deleted_background: red().light().step_9(),
147 deleted_border: red().light().step_9(),
148 error: red().light().step_9(),
149 error_background: red().light().step_9(),
150 error_border: red().light().step_9(),
151 hidden: neutral().light().step_9(),
152 hidden_background: neutral().light().step_9(),
153 hidden_border: neutral().light().step_9(),
154 hint: blue().light().step_9(),
155 hint_background: blue().light().step_9(),
156 hint_border: blue().light().step_9(),
157 ignored: neutral().light().step_9(),
158 ignored_background: neutral().light().step_9(),
159 ignored_border: neutral().light().step_9(),
160 info: blue().light().step_9(),
161 info_background: blue().light().step_9(),
162 info_border: blue().light().step_9(),
163 modified: yellow().light().step_9(),
164 modified_background: yellow().light().step_9(),
165 modified_border: yellow().light().step_9(),
166 predictive: neutral().light_alpha().step_9(),
167 predictive_background: neutral().light_alpha().step_9(),
168 predictive_border: neutral().light_alpha().step_9(),
169 renamed: blue().light().step_9(),
170 renamed_background: blue().light().step_9(),
171 renamed_border: blue().light().step_9(),
172 success: grass().light().step_9(),
173 success_background: grass().light().step_9(),
174 success_border: grass().light().step_9(),
175 unreachable: neutral().light().step_10(),
176 unreachable_background: neutral().light().step_10(),
177 unreachable_border: neutral().light().step_10(),
178 warning: yellow().light().step_9(),
179 warning_background: yellow().light().step_9(),
180 warning_border: yellow().light().step_9(),
181 }
182 }
183
184 pub fn diagnostic(&self) -> DiagnosticColors {
185 DiagnosticColors {
186 error: self.error,
187 warning: self.warning,
188 info: self.info,
189 }
190 }
191}