135 lines
4.1 KiB
Rust
135 lines
4.1 KiB
Rust
use gpui::Hsla;
|
|
use refineable::Refineable;
|
|
|
|
use crate::{blue, grass, neutral, red, yellow};
|
|
|
|
#[derive(Refineable, Clone, Debug)]
|
|
#[refineable(Debug, serde::Deserialize)]
|
|
pub struct StatusColors {
|
|
/// Indicates some kind of conflict, like a file changed on disk while it was open, or
|
|
/// merge conflicts in a Git repository.
|
|
pub conflict: Hsla,
|
|
|
|
/// Indicates something new, like a new file added to a Git repository.
|
|
pub created: Hsla,
|
|
|
|
/// Indicates that something no longer exists, like a deleted file.
|
|
pub deleted: Hsla,
|
|
|
|
/// Indicates a system error, a failed operation or a diagnostic error.
|
|
pub error: Hsla,
|
|
|
|
/// Represents a hidden status, such as a file being hidden in a file tree.
|
|
pub hidden: Hsla,
|
|
|
|
/// Indicates a hint or some kind of additional information.
|
|
pub hint: Hsla,
|
|
|
|
/// Indicates that something is deliberately ignored, such as a file or operation ignored by Git.
|
|
pub ignored: Hsla,
|
|
|
|
/// Represents informational status updates or messages.
|
|
pub info: Hsla,
|
|
|
|
/// Indicates a changed or altered status, like a file that has been edited.
|
|
pub modified: Hsla,
|
|
|
|
/// Indicates something that is predicted, like automatic code completion, or generated code.
|
|
pub predictive: Hsla,
|
|
|
|
/// Represents a renamed status, such as a file that has been renamed.
|
|
pub renamed: Hsla,
|
|
|
|
/// Indicates a successful operation or task completion.
|
|
pub success: Hsla,
|
|
|
|
/// Indicates some kind of unreachable status, like a block of code that can never be reached.
|
|
pub unreachable: Hsla,
|
|
|
|
/// Represents a warning status, like an operation that is about to fail.
|
|
pub warning: Hsla,
|
|
}
|
|
|
|
impl Default for StatusColors {
|
|
/// Don't use this!
|
|
/// We have to have a default to be `[refineable::Refinable]`.
|
|
/// todo!("Find a way to not need this for Refinable")
|
|
fn default() -> Self {
|
|
Self::dark()
|
|
}
|
|
}
|
|
|
|
pub struct DiagnosticColors {
|
|
pub error: Hsla,
|
|
pub warning: Hsla,
|
|
pub info: Hsla,
|
|
}
|
|
|
|
pub struct GitStatusColors {
|
|
pub created: Hsla,
|
|
pub deleted: Hsla,
|
|
pub modified: Hsla,
|
|
pub renamed: Hsla,
|
|
pub conflict: Hsla,
|
|
pub ignored: Hsla,
|
|
}
|
|
|
|
impl StatusColors {
|
|
pub fn dark() -> Self {
|
|
Self {
|
|
conflict: red().dark().step_9(),
|
|
created: grass().dark().step_9(),
|
|
deleted: red().dark().step_9(),
|
|
error: red().dark().step_9(),
|
|
hidden: neutral().dark().step_9(),
|
|
hint: blue().dark().step_9(),
|
|
ignored: neutral().dark().step_9(),
|
|
info: blue().dark().step_9(),
|
|
modified: yellow().dark().step_9(),
|
|
predictive: neutral().dark_alpha().step_9(),
|
|
renamed: blue().dark().step_9(),
|
|
success: grass().dark().step_9(),
|
|
unreachable: neutral().dark().step_10(),
|
|
warning: yellow().dark().step_9(),
|
|
}
|
|
}
|
|
|
|
pub fn light() -> Self {
|
|
Self {
|
|
conflict: red().light().step_9(),
|
|
created: grass().light().step_9(),
|
|
deleted: red().light().step_9(),
|
|
error: red().light().step_9(),
|
|
hidden: neutral().light().step_9(),
|
|
hint: blue().light().step_9(),
|
|
ignored: neutral().light().step_9(),
|
|
info: blue().light().step_9(),
|
|
modified: yellow().light().step_9(),
|
|
predictive: neutral().light_alpha().step_9(),
|
|
renamed: blue().light().step_9(),
|
|
success: grass().light().step_9(),
|
|
unreachable: neutral().light().step_10(),
|
|
warning: yellow().light().step_9(),
|
|
}
|
|
}
|
|
|
|
pub fn diagnostic(&self) -> DiagnosticColors {
|
|
DiagnosticColors {
|
|
error: self.error,
|
|
warning: self.warning,
|
|
info: self.info,
|
|
}
|
|
}
|
|
|
|
pub fn git(&self) -> GitStatusColors {
|
|
GitStatusColors {
|
|
created: self.created,
|
|
deleted: self.deleted,
|
|
modified: self.modified,
|
|
renamed: self.renamed,
|
|
conflict: self.conflict,
|
|
ignored: self.ignored,
|
|
}
|
|
}
|
|
}
|