Introduces ScrollManager to synchronize time axis and header scrolling
Improves user experience by keeping time axis and header aligned during scrolling
Enables dynamic vertical and horizontal scroll tracking for calendar components
Introduces dependency injection container and composition root
Adds core services like DateService and NavigationAnimator
Simplifies CalendarOrchestrator with improved store handling
Implements mock stores and demo application for V2 calendar
Introduces type-safe EventId with centralized normalization logic for clone and standard event IDs
Refactors event ID management across multiple components to use consistent ID transformation methods
Improves type safety and reduces potential ID-related bugs in drag-and-drop and event rendering
Eliminates unnecessary event visibility check in layout engine
Assumes events are pre-filtered before reaching the layout calculation, simplifying the processing logic and reducing computational overhead
Removes local `isEventVisible` method and directly processes all input events
Introduces a new color customization approach for calendar events using CSS custom properties and metadata
- Adds support for dynamic color assignment via event metadata
- Implements a flexible color utility class system
- Replaces hardcoded event type colors with a more generic color-mix() approach
- Provides broader color palette for event styling
Enhances calendar flexibility by introducing group-based column spanning and improving cross-mode event handling
Adds support for:
- Dynamic column grouping in date and resource modes
- Consistent event drag-and-drop across different calendar views
- More robust all-day event layout calculations
Improves event management logic to handle resource and date mode transitions more elegantly
Improves event rendering by integrating event filtering directly into column data sources
Key changes:
- Moves event filtering responsibility to IColumnDataSource
- Simplifies event rendering pipeline by pre-filtering events per column
- Supports both date and resource-based calendar modes
- Enhances drag and drop event update mechanism
Optimizes calendar rendering performance and flexibility
Introduces new ResourceColumnDataSource and ResourceHeaderRenderer to support column rendering by resources instead of dates
Enables dynamic calendar mode switching between date and resource views
Updates core managers and services to support async column retrieval
Refactors data source interfaces to use Promise-based methods
Improves calendar flexibility and resource management capabilities
Extracts common event payload interfaces for entity saved, deleted, and audit logged events
Improves type safety and reduces code duplication by centralizing event payload definitions
Introduces comprehensive audit trail system with:
- AuditService to track entity changes
- SyncManager for background sync of audit entries
- New CoreEvents for entity and audit tracking
- Simplified sync architecture with event-driven approach
Prepares system for enhanced compliance and change tracking
Implements polymorphic data seeding mechanism for initial application setup
- Adds Mock repositories for Event, Booking, Customer, and Resource entities
- Creates DataSeeder to automatically populate IndexedDB from JSON sources
- Enhances index.ts initialization process with data seeding step
- Adds mock JSON data files for comprehensive test data
Improves offline-first and development testing capabilities
Updates package dependencies to latest version of @novadi/core
Simplifies dependency and service registration by removing automatic array resolution of stores, API repositories, and entity services
Adds DateColumnDataSource as a new column data source implementation
Abstracts column data source with interface
Updates managers to use configuration-driven view and date
Decouples datasource creation from individual managers
Improves flexibility and dependency injection for calendar components
Updates event and column date parsing to use identifier instead of data attribute
Improves date handling consistency across multiple calendar managers and renderers
Replaces direct Date casting with dateService.parseISO() for more robust date parsing
Introduces BaseEntityService and SyncPlugin to eliminate code duplication across entity services
Improves:
- Code reusability through inheritance and composition
- Sync infrastructure for all entity types
- Polymorphic sync status management
- Reduced boilerplate code by ~75%
Supports generic sync for Event, Booking, Customer, and Resource entities
Implements a more flexible, modular approach to IndexedDB storage:
- Introduces IStore interface for dynamic store creation
- Adds specialized services for each entity (BookingService, CustomerService, etc.)
- Moves serialization logic to entity-specific classes
- Improves dependency injection and extensibility
Enables easier addition of new entity types with minimal configuration
Updates IndexedDB database schema to version 2
Adds support for bookings, customers, and resources stores
Includes new serialization methods for booking data
Extends events store with additional indexes for improved querying
Fundamentally refactors booking system to support:
- Split-resource bookings
- Service-level resource assignment
- Clear separation between booking and calendar events
Introduces new interfaces and type definitions to model complex booking scenarios, enabling more flexible and accurate resource management
Improves type safety by removing ambiguous type annotations
Centralizes date calculation logic into DateColumnDataSource
Improves separation of concerns across rendering components
Key changes:
- Introduces IColumnInfo interface for flexible column data
- Moves date calculation from multiple managers to dedicated datasource
- Removes duplicate date rendering logic
- Prepares architecture for future resource-based views
Introduces DateColumnDataSource to centralize date column generation logic
Simplifies GridManager by delegating date calculations to dedicated data source
Enhances flexibility for different calendar views and date rendering strategies
Improves separation of concerns and makes calendar view management more modular
Removes redundant period info update event and consolidates week information calculation
Streamlines navigation event flow by using navigation completed event for week info updates
Removes separate week info update method and moves calculation into renderer
Reduces complexity of event management and improves code efficiency
Replaces getPeriodRange with getDisplayDates approach
Simplifies event rendering by using flexible date array
Updates event rendering to work with dynamic date lists
Improves code modularity and reduces complexity
Updates navigation button event emission to use a more consistent payload type
Simplifies navigation logic by centralizing date navigation in NavigationManager
Removes redundant method implementations and standardizes event handling
Enhances navigation buttons management with advanced date calculation and view-specific navigation
Separates navigation logic from GridManager into dedicated NavigationButtons component
Adds support for multiple calendar views (week, month, day)
Implements robust event-driven navigation mechanism
Improves date navigation with dynamic period label generation
Replaces date-fns library with day.js to reduce bundle size and improve tree-shaking
- Centralizes all date logic in DateService
- Reduces library footprint from 576 KB to 29 KB
- Maintains 99.4% test coverage during migration
- Adds timezone and formatting plugins for day.js
Improves overall library performance and reduces dependency complexity
Extends event model to include optional description field
Enhances event rendering with:
- New description getter/setter in base event element
- Updated CSS grid layout for description display
- Dynamic description handling in event rendering
- Updated mock event data with descriptions
Improves visual information density and event context in calendar view
Improves event conversion logic between timed and all-day events during drag operations
Simplifies event movement and conversion algorithms
Adds specific handling for timed → all-day and all-day → all-day drops
Enhances event repositioning and layout recalculation
Modifies element selectors for all-day events to use more specific tag names
Replaces generic 'swp-event' with 'swp-allday-event' in event removal
Adds exclusion for max event indicator elements when clearing events
Improves event removal process with enhanced fade-out and logging
Adds data-removing attribute to exclude events during height calculations
Prevents unnecessary removal of all-day events during drag operations
Enhances event rendering and management for better performance and user experience
Removes redundant state tracking for all-day event layouts
Shifts from maintaining internal layout state to reading directly from DOM elements
Simplifies event handling and updates by using DOM as the source of truth
Improves performance by reducing unnecessary state management
Reorganizes navigation, view selector, and workweek preset managers into separate component files
Improves code organization by moving specialized manager classes to a more descriptive components directory
Adds enhanced logging for all-day event management and drag-and-drop interactions
Introduces NavigationButtonsManager to handle navigation button interactions
Renames NavigationRenderer to WeekInfoRenderer for clarity
Adds new NAV_BUTTON_CLICKED event for better separation of concerns
Improves event-driven navigation workflow
Introduces ViewSelectorManager to handle view state and UI interactions
Separates view logic from configuration management
Adds explicit tracking of current calendar view
Enhances view selection and state management
Improves modularity and separation of concerns
Extracts workweek preset logic from ViewManager into WorkweekPresetsManager
Improves separation of concerns by:
- Creating a dedicated manager for workweek preset UI
- Simplifying ViewManager to focus only on view selector
- Implementing event-driven CSS updates
- Reducing code duplication in ConfigManager
Follows "each UI element has its own manager" architectural principle
Registers new managers in the dependency injection container
Exposes WorkweekPresetsManager and ConfigManager in calendar debugging context
Enhances calendar initialization with additional management capabilities
Simplifies workweek change event propagation across managers
Removes redundant grid rerendering logic and focuses on clean event communication
Prepares infrastructure for more flexible workweek configuration updates
Relates to debug-gridstyle branch
Enhances event resizing functionality with smoother animation and more robust handling
Removes complex resize zone tracking in favor of simplified resize mechanism
Improves performance and simplifies event resize interactions
Cleans up unnecessary complexity in pointer and animation management
Simplifies event drag handling by removing redundant clone management
Optimizes single column event rendering and cleanup process
Removes unnecessary logging and console output
Improves event update and re-rendering strategies
Enhances performance and reduces complexity in event manipulation
Introduces originalSourceColumn to accurately track the starting column during drag events
Improves event rendering by ensuring correct column updates and maintaining drag context
Modifies drag end handling to use original source column for re-rendering
Adds async support for column rendering methods