diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index 89ff46bf64..a043e4eae3 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -613,6 +613,7 @@ fn diagnostic_header_renderer(entry: DiagnosticEntry, path: ProjectPath) let (message, highlights) = highlight_diagnostic_message(&entry.diagnostic.message); Arc::new(move |cx| { let settings = cx.global::(); + let tooltip_style = settings.theme.tooltip.clone(); let theme = &settings.theme.editor; let style = theme.diagnostic_header.clone(); let font_size = (style.text_scale_factor * settings.buffer_font_size).round(); @@ -683,6 +684,30 @@ fn diagnostic_header_renderer(entry: DiagnosticEntry, path: ProjectPath) }); } }) + .with_tooltip( + entry.diagnostic.group_id, + Flex::row() + .with_child( + Label::new( + "Jump to diagnostic (".to_string(), + tooltip_style.text.clone(), + ) + .boxed(), + ) + .with_child( + KeystrokeLabel::new( + Box::new(editor::OpenExcerpts), + Default::default(), + tooltip_style.text.clone(), + ) + .boxed(), + ) + .with_child(Label::new(")".to_string(), tooltip_style.text).boxed()) + .contained() + .with_style(tooltip_style.container) + .boxed(), + cx, + ) .aligned() .flex_float() .boxed(), diff --git a/crates/theme/src/theme.rs b/crates/theme/src/theme.rs index d5f50b08e2..9d3bb59bce 100644 --- a/crates/theme/src/theme.rs +++ b/crates/theme/src/theme.rs @@ -31,6 +31,7 @@ pub struct Theme { pub project_diagnostics: ProjectDiagnostics, pub breadcrumbs: ContainedText, pub contact_notification: ContactNotification, + pub tooltip: ContainedText, } #[derive(Deserialize, Default)] diff --git a/styles/src/styleTree/app.ts b/styles/src/styleTree/app.ts index 41266ff5f7..083863f6da 100644 --- a/styles/src/styleTree/app.ts +++ b/styles/src/styleTree/app.ts @@ -12,6 +12,7 @@ import workspace from "./workspace"; import contextMenu from "./contextMenu"; import projectDiagnostics from "./projectDiagnostics"; import contactNotification from "./contactNotification"; +import tooltip from "./tooltip"; export const panel = { padding: { top: 12, bottom: 12 }, @@ -37,5 +38,6 @@ export default function app(theme: Theme): Object { }, }, contactNotification: contactNotification(theme), + tooltip: tooltip(theme), }; } diff --git a/styles/src/styleTree/tooltip.ts b/styles/src/styleTree/tooltip.ts new file mode 100644 index 0000000000..a6bd85053b --- /dev/null +++ b/styles/src/styleTree/tooltip.ts @@ -0,0 +1,13 @@ +import Theme from "../themes/common/theme"; +import { backgroundColor, border, shadow, text } from "./components"; + +export default function tooltip(theme: Theme) { + return { + background: backgroundColor(theme, 500), + border: border(theme, "primary"), + padding: 6, + shadow: shadow(theme), + cornerRadius: 6, + ...text(theme, "sans", "primary", { size: "xs" }) + } +} \ No newline at end of file