bevy_ui_builders/dropdown/
types.rs

1//! Dropdown component types and state
2
3use bevy::prelude::*;
4
5/// Marker component for dropdown entities
6#[derive(Component, Debug, Clone, Copy)]
7pub struct Dropdown;
8
9/// Marker component for the dropdown button (clickable trigger)
10#[derive(Component, Debug, Clone, Copy)]
11pub struct DropdownButton;
12
13/// Marker component for the dropdown menu container
14#[derive(Component, Debug, Clone, Copy)]
15pub struct DropdownMenu;
16
17/// Marker component for individual dropdown options
18#[derive(Component, Debug, Clone, Copy)]
19pub struct DropdownOption {
20    /// Index of this option in the dropdown
21    pub index: usize,
22}
23
24/// State of the dropdown (open or closed)
25#[derive(Component, Debug, Clone, Copy, PartialEq, Eq)]
26pub enum DropdownState {
27    /// Dropdown menu is closed
28    Closed,
29    /// Dropdown menu is open
30    Open,
31}
32
33impl Default for DropdownState {
34    fn default() -> Self {
35        Self::Closed
36    }
37}
38
39/// Component storing dropdown configuration and current selection
40#[derive(Component, Debug, Clone)]
41pub struct DropdownData {
42    /// Available options
43    pub options: Vec<String>,
44    /// Currently selected option index
45    pub selected_index: Option<usize>,
46    /// Placeholder text when nothing is selected
47    pub placeholder: String,
48}
49
50impl DropdownData {
51    /// Get the currently selected value
52    pub fn selected_value(&self) -> Option<&str> {
53        self.selected_index
54            .and_then(|idx| self.options.get(idx))
55            .map(|s| s.as_str())
56    }
57
58    /// Get the text to display (selected value or placeholder)
59    pub fn display_text(&self) -> &str {
60        self.selected_value().unwrap_or(&self.placeholder)
61    }
62}