99 lines
3.6 KiB
Rust
99 lines
3.6 KiB
Rust
//! Generic inline menu view for rendering search results with selection and navigation.
|
|
mod message_bar;
|
|
mod message_provider;
|
|
mod model;
|
|
pub(crate) mod positioning;
|
|
pub mod styles;
|
|
mod view;
|
|
|
|
use super::{InputSuggestionsMode, UserQueryMenuAction};
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
pub use message_bar::{InlineMenuMessageArgs, InlineMenuMessageBarArgs};
|
|
pub use message_provider::{default_navigation_message_items, InlineMenuMessageProvider};
|
|
pub use model::{InlineMenuModel, InlineMenuModelEvent, InlineMenuTabConfig};
|
|
pub use positioning::InlineMenuPositioner;
|
|
pub use view::{
|
|
DetailsRenderConfig, InlineMenuAction, InlineMenuClickBehavior, InlineMenuEvent,
|
|
InlineMenuHeaderConfig, InlineMenuRowAction, InlineMenuView,
|
|
};
|
|
|
|
/// Identifies a specific inline menu type.
|
|
#[derive(
|
|
Debug,
|
|
Clone,
|
|
Copy,
|
|
PartialEq,
|
|
Eq,
|
|
Hash,
|
|
Serialize,
|
|
Deserialize,
|
|
schemars::JsonSchema,
|
|
settings_value::SettingsValue,
|
|
)]
|
|
#[schemars(
|
|
description = "Identifies a specific inline menu.",
|
|
rename_all = "snake_case"
|
|
)]
|
|
pub enum InlineMenuType {
|
|
SlashCommands,
|
|
ModelSelector,
|
|
ConversationMenu,
|
|
ProfileSelector,
|
|
PromptsMenu,
|
|
SkillMenu,
|
|
UserQueryMenu,
|
|
RewindMenu,
|
|
InlineHistoryMenu,
|
|
IndexedReposMenu,
|
|
PlanMenu,
|
|
}
|
|
|
|
impl InlineMenuType {
|
|
fn display_label(&self) -> &'static str {
|
|
match self {
|
|
InlineMenuType::SlashCommands => "/Commands",
|
|
InlineMenuType::ModelSelector => "/Model",
|
|
InlineMenuType::ConversationMenu => "/Conversations",
|
|
InlineMenuType::ProfileSelector => "/Profiles",
|
|
InlineMenuType::PromptsMenu => "/Prompts",
|
|
InlineMenuType::SkillMenu => "/Skills",
|
|
InlineMenuType::UserQueryMenu => "/Fork",
|
|
InlineMenuType::RewindMenu => "/Rewind",
|
|
InlineMenuType::InlineHistoryMenu => "History",
|
|
InlineMenuType::IndexedReposMenu => "/Repos",
|
|
InlineMenuType::PlanMenu => "/Plans",
|
|
}
|
|
}
|
|
|
|
pub(crate) fn from_suggestions_mode(mode: &InputSuggestionsMode) -> Option<Self> {
|
|
match mode {
|
|
InputSuggestionsMode::SlashCommands => Some(InlineMenuType::SlashCommands),
|
|
InputSuggestionsMode::ModelSelector => Some(InlineMenuType::ModelSelector),
|
|
InputSuggestionsMode::ConversationMenu => Some(InlineMenuType::ConversationMenu),
|
|
InputSuggestionsMode::ProfileSelector => Some(InlineMenuType::ProfileSelector),
|
|
InputSuggestionsMode::PromptsMenu => Some(InlineMenuType::PromptsMenu),
|
|
InputSuggestionsMode::SkillMenu => Some(InlineMenuType::SkillMenu),
|
|
InputSuggestionsMode::UserQueryMenu {
|
|
action: UserQueryMenuAction::ForkFrom,
|
|
..
|
|
} => Some(InlineMenuType::UserQueryMenu),
|
|
InputSuggestionsMode::UserQueryMenu {
|
|
action: UserQueryMenuAction::Rewind,
|
|
..
|
|
} => Some(InlineMenuType::RewindMenu),
|
|
InputSuggestionsMode::InlineHistoryMenu { .. } => {
|
|
Some(InlineMenuType::InlineHistoryMenu)
|
|
}
|
|
InputSuggestionsMode::IndexedReposMenu => Some(InlineMenuType::IndexedReposMenu),
|
|
InputSuggestionsMode::PlanMenu { .. } => Some(InlineMenuType::PlanMenu),
|
|
InputSuggestionsMode::Closed
|
|
| InputSuggestionsMode::HistoryUp { .. }
|
|
| InputSuggestionsMode::CompletionSuggestions { .. }
|
|
| InputSuggestionsMode::StaticWorkflowEnumSuggestions { .. }
|
|
| InputSuggestionsMode::DynamicWorkflowEnumSuggestions { .. }
|
|
| InputSuggestionsMode::AIContextMenu { .. } => None,
|
|
}
|
|
}
|
|
}
|