81 lines
2.3 KiB
Rust
81 lines
2.3 KiB
Rust
mod code_action_menu;
|
|
mod completion_menu;
|
|
mod context_menu;
|
|
mod diagnostic_popover;
|
|
mod hover_popover;
|
|
|
|
pub(crate) use code_action_menu::*;
|
|
pub(crate) use completion_menu::*;
|
|
pub(crate) use context_menu::*;
|
|
pub(crate) use diagnostic_popover::*;
|
|
pub(crate) use hover_popover::*;
|
|
|
|
use gpui::{
|
|
App, Div, ElementId, Entity, InteractiveElement as _, IntoElement, SharedString, Stateful,
|
|
StyleRefinement, Styled as _, Window, div, px, rems,
|
|
};
|
|
|
|
use crate::{
|
|
ActiveTheme, StyledExt as _,
|
|
text::{TextView, TextViewStyle},
|
|
};
|
|
|
|
pub(crate) enum ContextMenu {
|
|
Completion(Entity<CompletionMenu>),
|
|
CodeAction(Entity<CodeActionMenu>),
|
|
MouseContext(Entity<MouseContextMenu>),
|
|
}
|
|
|
|
impl ContextMenu {
|
|
pub(crate) fn is_open(&self, cx: &App) -> bool {
|
|
match self {
|
|
ContextMenu::Completion(menu) => menu.read(cx).is_open(),
|
|
ContextMenu::CodeAction(menu) => menu.read(cx).is_open(),
|
|
ContextMenu::MouseContext(menu) => menu.read(cx).is_open(),
|
|
}
|
|
}
|
|
|
|
pub(crate) fn render(&self) -> impl IntoElement {
|
|
match self {
|
|
ContextMenu::Completion(menu) => menu.clone().into_any_element(),
|
|
ContextMenu::CodeAction(menu) => menu.clone().into_any_element(),
|
|
ContextMenu::MouseContext(menu) => menu.clone().into_any_element(),
|
|
}
|
|
}
|
|
}
|
|
|
|
pub(super) fn render_markdown(
|
|
id: impl Into<ElementId>,
|
|
markdown: impl Into<SharedString>,
|
|
window: &mut Window,
|
|
cx: &mut App,
|
|
) -> TextView {
|
|
TextView::markdown(id, markdown, window, cx)
|
|
.style(
|
|
TextViewStyle::default()
|
|
.paragraph_gap(rems(0.5))
|
|
.heading_font_size(|level, rem_size| match level {
|
|
1..=3 => rem_size * 1,
|
|
4 => rem_size * 0.9,
|
|
_ => rem_size * 0.8,
|
|
})
|
|
.code_block(
|
|
StyleRefinement::default()
|
|
.bg(cx.theme().transparent)
|
|
.p_0()
|
|
.text_size(px(11.)),
|
|
),
|
|
)
|
|
.selectable(true)
|
|
}
|
|
|
|
pub(super) fn editor_popover(id: impl Into<ElementId>, cx: &App) -> Stateful<Div> {
|
|
div()
|
|
.id(id)
|
|
.flex_none()
|
|
.occlude()
|
|
.popover_style(cx)
|
|
.shadow_md()
|
|
.text_xs()
|
|
.p_1()
|
|
}
|