@uplink-protocol/calendar-controller
Version:
Flexible calendar API supporting both calendar and date-picker integrations for any JavaScript framework or library
423 lines (315 loc) โข 12.6 kB
Markdown
# ๐๏ธ Advanced Floating Calendar - Complete Implementation Guide
## ๐ Overview
The Advanced Floating Calendar is a sophisticated, feature-rich calendar widget that provides a modern, interactive user experience. It's designed to be lightweight, performant, and highly customizable while maintaining a beautiful, professional appearance.
## ๐ Key Features
### ๐จ **Modern UI Design**
- **Glass Morphism Effects**: Advanced backdrop-filter and blur effects
- **Gradient Headers**: Beautiful animated gradient backgrounds
- **Responsive Design**: Optimized for mobile, tablet, and desktop
- **Theme Support**: Default, Dark, and Gradient themes
- **Smooth Animations**: 60fps transitions and micro-interactions
### ๐ฏ **Interactive Features**
- **Draggable Widget**: Smooth drag-and-drop functionality with viewport constraints
- **Minimizable Interface**: Compact mini-view for space efficiency
- **Quick Actions Panel**: 6 interactive buttons for common operations
- **Real-time Status**: Live information display and updates
- **Keyboard Navigation**: Full accessibility support
### ๐ฑ **User Experience**
- **Sticky Positioning**: Always visible during page scrolling
- **Smart Positioning**: Automatic viewport constraint handling
- **Performance Monitoring**: Built-in stress testing and metrics
- **Notification System**: Animated toast notifications
- **State Persistence**: localStorage integration for settings
### ๐ง **Technical Features**
- **Modular Architecture**: Clean separation of concerns
- **Event-Driven Design**: Comprehensive callback system
- **Memory Efficient**: Optimized for long-running applications
- **Cross-Browser Support**: Works in all modern browsers
- **TypeScript Ready**: Full type definitions available
## ๐ File Structure
```
comprehensive-date-picker/
โโโ index.html # Main demo page
โโโ test-floating-calendar.html # Test suite page
โโโ js/
โ โโโ advanced-floating-calendar.js # Main calendar widget class
โ โโโ simple-calendar-controller.js # Lightweight calendar controller
โ โโโ comprehensive-demo.js # Demo functionality
โโโ README.md # This documentation
```
## ๐๏ธ Usage Examples
### Basic Initialization
```javascript
// Initialize the advanced floating calendar
const floatingCalendar = new AdvancedFloatingCalendar();
```
### With Custom Configuration
```javascript
const floatingCalendar = new AdvancedFloatingCalendar({
theme: 'dark',
position: { x: 100, y: 100 },
minimized: false,
showQuickActions: true,
enableDrag: true,
enableKeyboard: true
});
```
### Event Handling
```javascript
// Listen for date selection
floatingCalendar.on('dateSelected', (date) => {
console.log('Selected date:', date);
});
// Listen for theme changes
floatingCalendar.on('themeChanged', (theme) => {
console.log('Theme changed to:', theme);
});
// Listen for minimize/maximize
floatingCalendar.on('minimizeToggled', (isMinimized) => {
console.log('Calendar minimized:', isMinimized);
});
```
## ๐จ Theme System
### Available Themes
1. **Default Theme**
- Clean white background
- Blue accent colors
- Subtle shadows and borders
2. **Dark Theme**
- Dark background with light text
- Purple accent colors
- Glowing effects
3. **Gradient Theme**
- Colorful gradient backgrounds
- Dynamic color transitions
- Vibrant accent colors
### Theme Switching
```javascript
// Switch theme programmatically
floatingCalendar.switchTheme('dark');
// Get current theme
const currentTheme = floatingCalendar.getCurrentTheme();
```
## ๐ฏ Interactive Controls
### Quick Actions Panel
1. **๐
Today** - Jump to current date
2. **๐๏ธ Clear** - Clear all selections
3. **๐ Range** - Enable range selection mode
4. **๐พ Export** - Export calendar data
5. **โ๏ธ Settings** - Open settings panel
6. **โ Help** - Show help information
### Keyboard Shortcuts
- **Arrow Keys**: Navigate between dates
- **Enter**: Select highlighted date
- **Escape**: Close calendar or cancel selection
- **Space**: Toggle selection
- **Tab**: Navigate through controls
- **Shift + Tab**: Reverse navigation
## ๐ Notification System
### Notification Types
```javascript
// Success notification (green)
floatingCalendar.showNotification('Date saved successfully!', 'success');
// Info notification (blue)
floatingCalendar.showNotification('Today is highlighted', 'info');
// Warning notification (yellow)
floatingCalendar.showNotification('Invalid date range', 'warning');
// Error notification (red)
floatingCalendar.showNotification('Failed to save', 'error');
```
### Auto-Dismiss
Notifications automatically dismiss after 3 seconds, or can be dismissed manually by clicking.
## ๐ Performance Features
### Built-in Monitoring
```javascript
// Run performance stress test
floatingCalendar.runStressTest();
// Get performance metrics
const metrics = floatingCalendar.getPerformanceMetrics();
console.log('Render time:', metrics.renderTime);
console.log('Memory usage:', metrics.memoryUsage);
console.log('FPS:', metrics.fps);
```
### Optimization Features
- **Debounced Resize**: Optimized window resize handling
- **RAF Animation**: RequestAnimationFrame for smooth animations
- **Memory Cleanup**: Automatic cleanup of event listeners
- **Efficient Updates**: Minimal DOM manipulation
## ๐ฎ Drag and Drop
### Features
- **Smooth Dragging**: 60fps drag experience
- **Viewport Constraints**: Prevents dragging outside viewport
- **Visual Feedback**: Cursor changes and hover effects
- **Touch Support**: Works on mobile devices
### Configuration
```javascript
// Enable/disable dragging
floatingCalendar.setDragEnabled(true);
// Set drag constraints
floatingCalendar.setDragConstraints({
minX: 0,
minY: 0,
maxX: window.innerWidth - 300,
maxY: window.innerHeight - 400
});
```
## ๐ฑ Responsive Design
### Breakpoints
- **Mobile**: < 768px - Compact layout
- **Tablet**: 768px - 1024px - Medium layout
- **Desktop**: > 1024px - Full layout
### Adaptive Features
- **Touch-Friendly**: Larger touch targets on mobile
- **Readable Text**: Optimized font sizes
- **Accessible Colors**: WCAG compliant contrast ratios
- **Flexible Layout**: Adapts to available space
## ๐ง API Reference
### Main Methods
```javascript
// Calendar Control
floatingCalendar.show() // Show calendar
floatingCalendar.hide() // Hide calendar
floatingCalendar.toggle() // Toggle visibility
floatingCalendar.destroy() // Clean up and remove
// Theme Management
floatingCalendar.switchTheme(theme) // Switch theme
floatingCalendar.getCurrentTheme() // Get current theme
// Position Management
floatingCalendar.setPosition(x, y) // Set position
floatingCalendar.getPosition() // Get current position
floatingCalendar.centerOnScreen() // Center on screen
// State Management
floatingCalendar.minimize() // Minimize calendar
floatingCalendar.maximize() // Maximize calendar
floatingCalendar.toggleMinimize() // Toggle minimize state
// Date Operations
floatingCalendar.selectDate(date) // Select specific date
floatingCalendar.selectToday() // Select today
floatingCalendar.clearSelection() // Clear selection
floatingCalendar.getSelectedDate() // Get selected date
// Notifications
floatingCalendar.showNotification(msg, type) // Show notification
floatingCalendar.clearNotifications() // Clear all notifications
// Performance
floatingCalendar.runStressTest() // Run performance test
floatingCalendar.getPerformanceMetrics() // Get metrics
```
### Event System
```javascript
// Available Events
- 'dateSelected' // Date was selected
- 'dateDeselected' // Date was deselected
- 'themeChanged' // Theme was changed
- 'minimizeToggled' // Minimize state changed
- 'positionChanged' // Position was updated
- 'dragStart' // Drag operation started
- 'dragEnd' // Drag operation ended
- 'quickAction' // Quick action was triggered
- 'notificationShown' // Notification was displayed
- 'performanceTest' // Performance test completed
```
## ๐งช Testing
### Test Suite
The floating calendar includes a comprehensive test suite (`test-floating-calendar.html`) that covers:
1. **Drag Functionality Test**
2. **Theme Switching Test**
3. **Minimize/Maximize Test**
4. **Quick Actions Test**
5. **Keyboard Navigation Test**
6. **Notification System Test**
7. **Performance Stress Test**
8. **Range Selection Test**
9. **Scroll Behavior Test**
### Running Tests
1. Open `test-floating-calendar.html` in a browser
2. Click individual test buttons or "Run All Tests"
3. Monitor results in the test results panel
4. Check performance metrics in real-time
## ๐ Performance Benchmarks
### Typical Performance Metrics
- **Initial Render**: < 16ms
- **Theme Switch**: < 8ms
- **Drag Operation**: 60fps
- **Memory Usage**: < 5MB
- **Animation FPS**: 60fps
### Optimization Tips
1. **Minimize DOM Queries**: Cache frequently accessed elements
2. **Use RAF**: Leverage requestAnimationFrame for animations
3. **Debounce Events**: Throttle resize and scroll handlers
4. **Clean Up**: Remove event listeners when destroying
## ๐ฏ Best Practices
### Implementation
```javascript
// Good: Initialize once and reuse
const calendar = new AdvancedFloatingCalendar();
// Good: Use event callbacks
calendar.on('dateSelected', handleDateSelection);
// Good: Clean up when done
window.addEventListener('beforeunload', () => {
calendar.destroy();
});
```
### Styling
```css
/* Good: Use CSS custom properties for theming */
:root {
--calendar-primary: #3b82f6;
--calendar-background: #ffffff;
--calendar-text: #1f2937;
}
/* Good: Respect user preferences */
@media (prefers-reduced-motion: reduce) {
.floating-calendar * {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
```
## ๐ Troubleshooting
### Common Issues
1. **Calendar Not Showing**
- Check console for JavaScript errors
- Verify script files are loaded correctly
- Ensure DOM is ready before initialization
2. **Drag Not Working**
- Check if drag is enabled in configuration
- Verify touch-action CSS properties
- Test on different devices/browsers
3. **Themes Not Switching**
- Check if theme files are loaded
- Verify CSS custom properties support
- Check browser developer tools for style conflicts
4. **Performance Issues**
- Run the built-in stress test
- Check memory usage in developer tools
- Minimize concurrent animations
### Debug Mode
```javascript
// Enable debug logging
const calendar = new AdvancedFloatingCalendar({
debug: true
});
// Check performance metrics
console.log(calendar.getPerformanceMetrics());
```
## ๐ฎ Future Enhancements
### Planned Features
1. **Multi-Calendar Support**: Multiple calendar instances
2. **Custom Themes**: User-defined theme creation
3. **Plugin System**: Extensible functionality
4. **Internationalization**: Multi-language support
5. **Advanced Animations**: More transition effects
6. **Accessibility**: Enhanced screen reader support
### Contributing
The floating calendar is designed to be extensible. Key areas for contribution:
- New themes and visual styles
- Additional quick action implementations
- Performance optimizations
- Accessibility improvements
- Mobile-specific enhancements
## ๐ License
This implementation is part of the Odyssey Date Picker component library. Please refer to the main project license for usage terms.
---
## ๐ Conclusion
The Advanced Floating Calendar represents a complete, production-ready calendar widget with modern UI design, comprehensive functionality, and excellent performance. It's suitable for use in professional applications requiring sophisticated date selection capabilities.
For support, examples, and updates, please refer to the main Odyssey project documentation.