use crate::components::CalendarListItem; use crate::services::calendar_service::{UserInfo, ExternalCalendar}; use web_sys::HtmlSelectElement; use yew::prelude::*; #[derive(Clone, PartialEq)] pub enum ViewMode { Month, Week, } #[derive(Clone, PartialEq)] pub enum Theme { Default, Ocean, Forest, Sunset, Purple, Dark, Rose, Mint, } #[derive(Clone, PartialEq)] pub enum Style { Default, Google, } impl Theme { pub fn value(&self) -> &'static str { match self { Theme::Default => "default", Theme::Ocean => "ocean", Theme::Forest => "forest", Theme::Sunset => "sunset", Theme::Purple => "purple", Theme::Dark => "dark", Theme::Rose => "rose", Theme::Mint => "mint", } } pub fn from_value(value: &str) -> Self { match value { "ocean" => Theme::Ocean, "forest" => Theme::Forest, "sunset" => Theme::Sunset, "purple" => Theme::Purple, "dark" => Theme::Dark, "rose" => Theme::Rose, "mint" => Theme::Mint, _ => Theme::Default, } } } impl Style { pub fn value(&self) -> &'static str { match self { Style::Default => "default", Style::Google => "google", } } pub fn from_value(value: &str) -> Self { match value { "google" => Style::Google, _ => Style::Default, } } pub fn stylesheet_path(&self) -> Option<&'static str> { match self { Style::Default => None, // No additional stylesheet needed - uses base styles.css Style::Google => Some("google.css"), // Trunk copies to root level } } } impl Default for ViewMode { fn default() -> Self { ViewMode::Month } } #[derive(Properties, PartialEq)] pub struct SidebarProps { pub user_info: Option, pub on_logout: Callback<()>, pub on_add_calendar: Callback<()>, pub external_calendars: Vec, pub on_external_calendar_toggle: Callback, pub on_external_calendar_delete: Callback, pub on_external_calendar_refresh: Callback, pub color_picker_open: Option, pub on_color_change: Callback<(String, String)>, pub on_color_picker_toggle: Callback, pub available_colors: Vec, pub on_color_editor_open: Callback<(usize, String)>, // (index, current_color) pub refreshing_calendar_id: Option, pub on_calendar_context_menu: Callback<(MouseEvent, String)>, pub on_calendar_visibility_toggle: Callback, pub current_view: ViewMode, pub on_view_change: Callback, pub current_theme: Theme, pub on_theme_change: Callback, pub current_style: Style, pub on_style_change: Callback