Commit Graph

4 Commits

Author SHA1 Message Date
Connor Johnstone
62c39b8aa5 Implement comprehensive RRULE-based recurrence system with conditional UI
This commit introduces a complete RFC 5545-compliant recurrence management system that extends the event creation modal with sophisticated recurring event capabilities.

## New Features:

### Conditional Recurrence UI:
- **Interval Support**: "Every N days/weeks/months/years" with dynamic pluralization
- **End Conditions**: Never/Until date/After N occurrences with radio button interface
- **Weekly Options**: Enhanced weekday selection with existing checkbox interface
- **Monthly Options**: Choose between day-of-month (1-31) or positioned weekdays ("First Monday", "Last Friday")
- **Yearly Options**: Month selection grid allowing multiple months per year

### RRULE Parser & Generator:
- **Comprehensive Parser**: Handles FREQ, INTERVAL, BYDAY, BYMONTHDAY, BYMONTH, UNTIL, COUNT parameters
- **Smart Field Population**: Existing recurring events properly populate all recurrence fields from RRULE
- **RFC 5545 Compliance**: Full compliance with iCalendar recurrence specification
- **Round-trip Accuracy**: Parse → Edit → Generate produces identical RRULE

### Enhanced Data Model:
- **Extended EventCreationData**: Added 6 new fields for advanced recurrence options
- **Type Safety**: Strong typing with validation and bounds checking
- **Efficient Parsing**: Single-pass RRULE parsing with optimized data structures

### Professional Styling:
- **Responsive Design**: Mobile-friendly layout with proper spacing and grid systems
- **Visual Hierarchy**: Clean organization with grouped sections and proper labeling
- **User Experience**: Smart defaults, mutual exclusion logic, and intuitive workflows

## Technical Implementation:

### RRULE Examples:
- **Weekly**: `FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,WE,FR;COUNT=10`
- **Monthly**: `FREQ=MONTHLY;BYDAY=1MO;UNTIL=20241231T000000Z`
- **Yearly**: `FREQ=YEARLY;BYMONTH=3,5;INTERVAL=2`

### Test Coverage:
- **7 Test Cases**: Complete coverage of parsing, building, and transformation logic
- **Edge Cases**: Empty values, positioning logic, format validation
- **Integration Tests**: End-to-end RRULE round-trip verification

This implementation provides enterprise-grade recurrence management while maintaining backward compatibility with existing simple recurrence patterns. Users can now create and edit sophisticated recurring events with full fidelity to RFC 5545 standards.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-30 23:12:06 -04:00
Connor Johnstone
75eddcf85d Remove all user-facing emojis and improve modal styling
This commit enhances the professional appearance of the calendar application by removing all user-facing emojis while preserving debug logging functionality. Additionally, includes modal layout and styling improvements for better usability.

## Changes Made:

### Emoji Removal:
- **Event creation modal tabs**: Removed emojis from all 6 tab buttons (📅 Basic Details → Basic Details, etc.)
- **Modal content**: Removed emojis from alarm types, attachment types, pattern examples, and completion status
- **Theme picker**: Removed emojis from all 8 theme options (🌊 Ocean → Ocean, etc.)
- **Context menus**: Removed emojis from event context menu (edit/delete actions) and calendar context menu

### Modal Styling Improvements:
- **Width expansion**: Increased modal max-width from 500px to 900px (80% wider)
- **Enhanced padding**: Added more padding to modal header (2rem 3rem 1.5rem) and tab content areas
- **Responsive design**: Improved mobile adjustments while maintaining desktop experience
- **Checkbox fix**: Override width inheritance for "All Day" checkbox with auto width and inline-block display

### Form Layout Enhancement:
- **Field reordering**: Moved Repeat and Reminder options above date/time pickers for better workflow
- **Visual consistency**: Maintained clean, professional appearance throughout the interface

The application now presents a clean, professional interface suitable for business environments while retaining full functionality. Debug logging with emojis is preserved for development purposes.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-30 22:45:10 -04:00
Connor Johnstone
0babfc90f4 Implement comprehensive tabbed event creation modal with full VEvent support
Transform the basic event creation modal into a professional 6-tab interface
exposing all major RFC 5545 VEvent properties with enhanced UX:

• Basic Details: Essential fields (title, calendar, dates, location, basic recurrence/reminders)
• Advanced: Status, priority, classification, extended reminders/recurrence
• People: Organizer and attendee management with validation
• Categories: Interactive tagging system with quick-add buttons
• Location: Enhanced location handling with common shortcuts and geo features preview
• Reminders: Comprehensive alarm configuration with attachment features preview

Features:
- Complete RFC 5545 compliance throughout all tabs
- Interactive elements: 30+ clickable tags and quick-action buttons
- Professional styling with full theme compatibility (including dark mode)
- Mobile-responsive design with optimized layouts
- Educational content explaining calendar system capabilities
- Smooth tab navigation with active state management
- Form validation and smart defaults
- Future-proof extensible architecture

Technical implementation:
- Type-safe Rust/Yew state management with proper event handling
- Modular tab-based architecture for maintainability
- Performance optimized with efficient state updates
- JsCast integration for proper DOM element handling
- Comprehensive CSS with theme variants and responsive breakpoints

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-30 22:13:05 -04:00
Connor Johnstone
15f2d0c6d9 Implement shared RFC 5545 VEvent library with workspace restructuring
- Created calendar-models/ shared library with RFC 5545-compliant VEvent structures
- Migrated backend to use shared VEvent with proper field mappings (dtstart/dtend, rrule, exdate, etc.)
- Converted CalDAV client to parse into VEvent structures with structured types
- Updated all CRUD handlers to use VEvent with CalendarUser, Attendee, VAlarm types
- Restructured project as Cargo workspace with frontend/, backend/, calendar-models/
- Updated Trunk configuration for new directory structure
- Fixed all compilation errors and field references throughout codebase
- Updated documentation and build instructions for workspace structure

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-30 11:45:58 -04:00