Codex Handbook
tui/src/bottom_pane/chat_composer/popup_state.rs 32 lines
//! Popup lifecycle state for the chat composer.//! Tracks the single active popup plus dismissal/query state used to synchronize it.use crate::bottom_pane::command_popup::CommandPopup;use crate::bottom_pane::file_search_popup::FileSearchPopup;use crate::bottom_pane::mentions_v2::MentionV2Popup;use crate::bottom_pane::skill_popup::SkillPopup;#[derive(Default)]pub(super) struct PopupState {    pub(super) active: ActivePopup,    pub(super) dismissed_file_token: Option<String>,    pub(super) current_file_query: Option<String>,    pub(super) dismissed_mention_token: Option<String>,}impl PopupState {    pub(super) fn active(&self) -> bool {        !matches!(self.active, ActivePopup::None)    }}/// Popup state - at most one can be visible at any time.#[derive(Default)]pub(super) enum ActivePopup {    #[default]    None,    Command(CommandPopup),    File(FileSearchPopup),    Skill(SkillPopup),    MentionV2(MentionV2Popup),}