use gpui::rems; use gpui::Rems; pub use gpui::{ div, Component, Element, ElementId, InteractiveElement, ParentElement, SharedString, Styled, ViewContext, WindowContext, }; pub use crate::elevation::*; pub use crate::StyledExt; pub use crate::{ButtonVariant, TextColor}; pub use theme2::ActiveTheme; use gpui::Hsla; use strum::EnumIter; #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)] pub enum UITextSize { /// The default size for UI text. /// /// `0.825rem` or `14px` at the default scale of `1rem` = `16px`. /// /// Note: The absolute size of this text will change based on a user's `ui_scale` setting. #[default] Default, /// The small size for UI text. /// /// `0.75rem` or `12px` at the default scale of `1rem` = `16px`. /// /// Note: The absolute size of this text will change based on a user's `ui_scale` setting. Small, } impl UITextSize { pub fn rems(self) -> Rems { match self { Self::Default => rems(0.875), Self::Small => rems(0.75), } } } #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)] pub enum FileSystemStatus { #[default] None, Conflict, Deleted, } impl std::fmt::Display for FileSystemStatus { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, "{}", match self { Self::None => "None", Self::Conflict => "Conflict", Self::Deleted => "Deleted", } ) } } #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)] pub enum GitStatus { #[default] None, Created, Modified, Deleted, Conflict, Renamed, } impl GitStatus { pub fn hsla(&self, cx: &WindowContext) -> Hsla { match self { Self::None => cx.theme().system().transparent, Self::Created => cx.theme().status().created, Self::Modified => cx.theme().status().modified, Self::Deleted => cx.theme().status().deleted, Self::Conflict => cx.theme().status().conflict, Self::Renamed => cx.theme().status().renamed, } } } impl std::fmt::Display for GitStatus { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, "{}", match self { Self::None => "None", Self::Created => "Created", Self::Modified => "Modified", Self::Deleted => "Deleted", Self::Conflict => "Conflict", Self::Renamed => "Renamed", } ) } } #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)] pub enum DiagnosticStatus { #[default] None, Error, Warning, Info, } #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)] pub enum IconSide { #[default] Left, Right, } #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)] pub enum OrderMethod { #[default] Ascending, Descending, MostRecent, } #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)] pub enum Shape { #[default] Circle, RoundedRectangle, } #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)] pub enum DisclosureControlVisibility { #[default] OnHover, Always, } #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)] pub enum DisclosureControlStyle { /// Shows the disclosure control only when hovered where possible. /// /// More compact, but not available everywhere. ChevronOnHover, /// Shows an icon where possible, otherwise shows a chevron. /// /// For example, in a file tree a folder or file icon is shown /// instead of a chevron Icon, /// Always shows a chevron. Chevron, /// Completely hides the disclosure control where possible. None, } #[derive(Debug, PartialEq, Eq, Clone, Copy, EnumIter)] pub enum OverflowStyle { Hidden, Wrap, } #[derive(Default, PartialEq, Copy, Clone, EnumIter, strum::Display)] pub enum InteractionState { #[default] Enabled, Hovered, Active, Focused, Disabled, } impl InteractionState { pub fn if_enabled(&self, enabled: bool) -> Self { if enabled { *self } else { InteractionState::Disabled } } } #[derive(Debug, Default, PartialEq, Eq, Hash, Clone, Copy)] pub enum Selection { #[default] Unselected, Indeterminate, Selected, } impl Selection { pub fn inverse(&self) -> Self { match self { Self::Unselected | Self::Indeterminate => Self::Selected, Self::Selected => Self::Unselected, } } }