- Add recurring edit modal with three modification options:
• "Only this event" - Creates exception for single occurrence
• "This and future events" - Splits series from occurrence forward
• "All occurrences in this series" - Updates entire series time
- Enhance backend update API to support series modifications:
• Add update_action parameter for recurring event operations
• Implement time-only updates that preserve original start dates
• Convert timestamped occurrence UIDs to base UIDs for series updates
• Preserve recurrence rules during series modifications
- Fix recurring event drag operations:
• Show modal for recurring events instead of direct updates
• Handle EXDATE creation for single occurrence modifications
• Support series splitting with UNTIL clause modifications
• Maintain proper UID management for different modification types
- Clean up debug logging and restore page refresh for data consistency
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add drag-to-move event handlers to existing events in week view
- Extend drag state management to support both create and move operations
- Implement visual feedback with event preview during drag and hidden original
- Calculate new start/end times while preserving event duration
- Add CalDAV server update integration via calendar service
- Wire event update callbacks through component hierarchy (WeekView → Calendar → RouteHandler → App)
- Preserve all original event properties (title, description, location, reminders, etc.)
- Handle timezone conversion from local to UTC for server storage
- Add error handling with user feedback and success confirmation
- Include moving event CSS styling with enhanced visual feedback
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add toggle button (15/30 minutes) in calendar header next to navigation arrows
- Implement circular frosted styling consistent with nav buttons
- Add configurable snapping for drag-to-create events in week view
- Persist time increment setting across browser sessions using localStorage
- Update snap function to accept configurable increment instead of hardcoded 15 minutes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
When a context menu is open, clicking outside should only close the menu
without triggering underlying actions (like drag-to-create in week view).
Implementation:
- Enhanced global click handler to prevent default actions when menus are open
- Added context menu state propagation through component hierarchy
- Modified interactive components to check context menu state before acting
- Provides double protection at both global and component levels
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Integrate drag-to-create functionality with the full event creation pipeline:
- Connect WeekView drag events to CreateEventModal via callback chain
- Add event creation request callback through Calendar → RouteHandler → App
- Implement proper timezone conversion throughout the entire flow
- Fix pixels_to_time calculation (1px = 1 minute, not complex formula)
- Add initial_start_time/initial_end_time props to CreateEventModal
- Convert local times to UTC in both event creation and update functions
- Ensure modal displays correct local times while backend receives UTC
- Support both temporary drag events and real server events in modal
The complete flow now works: drag selection → modal with correct times →
proper UTC conversion → backend storage → correct display in calendar.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add time range display to week view events showing "start - end" format
- Optimize time display with smart AM/PM formatting to reduce redundancy
- Fix context menu overlap by adding stop_propagation to event handlers
- Implement persistent view mode (Month/Week) across page refreshes using localStorage
- Replace month-based tracking with intelligent selected date tracking
- Add day selection in month view with visual feedback and click handlers
- Fix view switching to navigate to week containing selected day, not first week of month
- Separate selected_date from display_date for proper context switching
- Simplify week view header to show "Month Year" instead of "Week of Month Day"
- Add backward compatibility for existing localStorage keys
Greatly improves calendar navigation and user experience with persistent state
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Split monolithic Calendar component into focused sub-components:
- CalendarHeader: Navigation buttons and title display
- MonthView: Monthly calendar grid layout and event rendering
- WeekView: Weekly calendar view with full-height day containers
- Add ViewMode enum for Month/Week view switching in sidebar dropdown
- Fix event styling by correcting CSS class from "event" to "event-box"
- Implement proper week view layout with full-height day containers
- Maintain all existing functionality: event handling, context menus, localStorage persistence
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Load saved month from localStorage on calendar initialization
- Fall back to current date if no saved month exists
- Save current month to localStorage on all navigation actions:
- Previous month navigation
- Next month navigation
- Today button clicks
- Use YYYY-MM-DD format for localStorage storage
- Maintain month view after page refreshes from event creation/editing
- Preserve user's selected month during manual browser refreshes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add go_to_today callback that navigates to first day of current month
- Position Today button between month title and next month arrow
- Center month/year title using absolute positioning
- Group Today button and next arrow in header-right container with 0.5rem gap
- Style Today button with pill shape, semi-transparent background, and hover effects
- Add responsive styling for mobile screens with smaller text and padding
- Maintain clean, balanced header layout on all screen sizes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add CalendarContextMenu component for right-click on calendar days
- Add CreateEventModal component with comprehensive event creation form
- Integrate context menu detection to avoid conflicts between event/calendar menus
- Add form validation and date/time selection with all-day toggle
- Connect modal through component hierarchy from app to calendar
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Backend enhancements:
- Add calendar_path field to CalendarEvent for color mapping
- Generate consistent colors for calendars using path-based hashing
- Update CalDAV parsing to associate events with their calendar paths
- Add 16-color palette with hash-based assignment algorithm
Frontend features:
- Interactive color picker with 4x4 grid of selectable colors
- Click color swatches to open dropdown with all available colors
- Instant color changes for both sidebar and calendar events
- Persistent color preferences using local storage
- Enhanced UX with hover effects and visual feedback
Styling improvements:
- Larger 16px color swatches for better clickability
- Professional color picker dropdown with smooth animations
- Dynamic event coloring based on calendar assignment
- Improved contrast with text shadows and borders
- Click-outside-to-close functionality for better UX
Users can now personalize their calendar organization with custom colors
that persist across sessions and immediately update throughout the app.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Backend: Add GET /api/calendar/events/:uid endpoint for single event refresh
- Backend: Implement fetch_event_by_uid method to retrieve updated events from CalDAV
- Frontend: Add event click callback system to trigger refresh on interaction
- Frontend: Display loading state with orange pulsing animation during refresh
- Frontend: Smart event data updates without full calendar reload
- Frontend: Graceful error handling with fallback to cached data
- CSS: Add refreshing animation for visual feedback during updates
Events now automatically refresh from CalDAV server when clicked, ensuring
users always see the most current event data including changes made in
other calendar applications.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created dedicated EventModal component in src/components/event_modal.rs
- Extracted modal logic and styling from calendar component for better separation
- Updated data flow to pass full CalendarEvent objects instead of strings
- Added PartialEq derive to CalendarEvent for component props
- Updated service layer to group events by CalendarEvent objects
- Enhanced event click handling to show detailed event information
- Modal displays title, description, location, start/end times, and status
- Maintained existing modal styling and user interaction patterns
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added click handlers to calendar days for user interaction
- Implemented selected day state tracking in calendar component
- Added CSS styling for selected days with green highlight
- Selected days show distinct visual feedback with borders and shadows
- Supports combination states (selected+today, selected+events)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added full CalDAV integration to display real calendar events from Baikal server:
Backend changes:
- Added CalDAV client with iCalendar parsing and XML handling
- Created /api/calendar/events endpoint with authentication
- Fixed multiline regex patterns for namespace-prefixed XML tags
- Added proper calendar path discovery and event filtering
Frontend changes:
- Created CalendarService for API communication
- Updated calendar UI to display events as blue boxes with titles
- Added loading states and error handling
- Integrated real-time event fetching on calendar load
Now successfully displays 3 test events from the Baikal server with proper date formatting and responsive design.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added a comprehensive monthly calendar component with modern styling:
- Full monthly view with proper date calculations
- Current day highlighting and navigation
- Responsive design for all screen sizes
- Event indicator support for future integration
- Takes up most of screen space as requested
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>