Implement comprehensive style system with Google Calendar theme
This commit adds a complete style system alongside the existing theme system, allowing users to switch between different UI styles while maintaining theme color variations. **Core Features:** - Style enum (Default, Google Calendar) separate from Theme enum - Hot-swappable stylesheets with dynamic loading - Style preference persistence (localStorage + database) - Style picker UI in sidebar below theme picker **Frontend Implementation:** - Add Style enum to sidebar.rs with value/display methods - Implement dynamic stylesheet loading in app.rs - Add style picker dropdown with proper styling - Handle style state management and persistence - Add web-sys features for HtmlLinkElement support **Backend Integration:** - Add calendar_style column to user_preferences table - Update all database operations (insert/update/select) - Extend API models for style preference - Add migration for existing users **Google Calendar Style:** - Clean Material Design-inspired interface - White sidebar with proper contrast - Enhanced calendar grid with subtle shadows - Improved event styling with hover effects - Google Sans typography throughout - Professional color scheme and spacing **Technical Details:** - Trunk asset management for stylesheet copying - High CSS specificity to override theme styles - Modular CSS architecture for easy extensibility - Comprehensive text contrast fixes - Enhanced calendar cells and navigation Users can now choose between the original gradient design (Default) and a clean Google Calendar-inspired interface (Google Calendar), with full preference persistence across sessions. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
		| @@ -93,6 +93,7 @@ pub struct UserPreferences { | ||||
|     pub calendar_time_increment: Option<i32>, | ||||
|     pub calendar_view_mode: Option<String>, | ||||
|     pub calendar_theme: Option<String>, | ||||
|     pub calendar_style: Option<String>, | ||||
|     pub calendar_colors: Option<String>, // JSON string | ||||
|     pub updated_at: DateTime<Utc>, | ||||
| } | ||||
| @@ -106,6 +107,7 @@ impl UserPreferences { | ||||
|             calendar_time_increment: Some(15), | ||||
|             calendar_view_mode: Some("month".to_string()), | ||||
|             calendar_theme: Some("light".to_string()), | ||||
|             calendar_style: Some("default".to_string()), | ||||
|             calendar_colors: None, | ||||
|             updated_at: Utc::now(), | ||||
|         } | ||||
| @@ -264,14 +266,15 @@ impl<'a> PreferencesRepository<'a> { | ||||
|             sqlx::query( | ||||
|                 "INSERT INTO user_preferences  | ||||
|                  (user_id, calendar_selected_date, calendar_time_increment,  | ||||
|                   calendar_view_mode, calendar_theme, calendar_colors, updated_at)  | ||||
|                  VALUES (?, ?, ?, ?, ?, ?, ?)", | ||||
|                   calendar_view_mode, calendar_theme, calendar_style, calendar_colors, updated_at)  | ||||
|                  VALUES (?, ?, ?, ?, ?, ?, ?, ?)", | ||||
|             ) | ||||
|             .bind(&prefs.user_id) | ||||
|             .bind(&prefs.calendar_selected_date) | ||||
|             .bind(&prefs.calendar_time_increment) | ||||
|             .bind(&prefs.calendar_view_mode) | ||||
|             .bind(&prefs.calendar_theme) | ||||
|             .bind(&prefs.calendar_style) | ||||
|             .bind(&prefs.calendar_colors) | ||||
|             .bind(&prefs.updated_at) | ||||
|             .execute(self.db.pool()) | ||||
| @@ -286,7 +289,7 @@ impl<'a> PreferencesRepository<'a> { | ||||
|         sqlx::query( | ||||
|             "UPDATE user_preferences  | ||||
|              SET calendar_selected_date = ?, calendar_time_increment = ?,  | ||||
|                  calendar_view_mode = ?, calendar_theme = ?,  | ||||
|                  calendar_view_mode = ?, calendar_theme = ?, calendar_style = ?, | ||||
|                  calendar_colors = ?, updated_at = ? | ||||
|              WHERE user_id = ?", | ||||
|         ) | ||||
| @@ -294,6 +297,7 @@ impl<'a> PreferencesRepository<'a> { | ||||
|         .bind(&prefs.calendar_time_increment) | ||||
|         .bind(&prefs.calendar_view_mode) | ||||
|         .bind(&prefs.calendar_theme) | ||||
|         .bind(&prefs.calendar_style) | ||||
|         .bind(&prefs.calendar_colors) | ||||
|         .bind(Utc::now()) | ||||
|         .bind(&prefs.user_id) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Connor Johnstone
					Connor Johnstone