No description
Refactors event overlap detection to use pixel-based comparison. This improves accuracy and addresses issues with incorrect overlap calculations when events have slight time differences but visually overlap. It removes dependency on the event manager and the need to convert elements to calendar events for overlap detection. |
||
|---|---|---|
| .claude | ||
| .roo | ||
| architecture | ||
| docs | ||
| src | ||
| wwwroot | ||
| .gitignore | ||
| build.js | ||
| Calendar Plantempus.sln | ||
| calendar-complete-specification.md | ||
| calendar-config.js | ||
| calendar-data-manager.js | ||
| calendar-date-utils.js | ||
| calendar-event-types.js | ||
| calendar-eventbus.js | ||
| calendar-grid-manager.js | ||
| calendar-poc-single-file.html | ||
| CalendarServer.csproj | ||
| CLAUDE.md | ||
| event-overlap-implementation-plan.md | ||
| month-view-design.html | ||
| month-view-expanded.html | ||
| overlap-fix-plan.md | ||
| package-lock.json | ||
| package.json | ||
| Program.cs | ||
| README.md | ||
| resource-calendar-structure.md | ||
| tsconfig.json | ||
Calendar Plantempus
En moderne, event-drevet kalenderapplikation bygget med TypeScript og ASP.NET Core.
Projekt Information
- Projekt ID: 8ecf2aa3-a2e4-4cc3-aa18-1c4352f00ff1
- Repository: Calendar (afb8a8ec-cdbc-4c55-8631-fd0285974485)
- Status: Under aktiv udvikling
Teknisk Arkitektur
- Frontend: TypeScript med esbuild som bundler
- Arkitektur: Event-drevet med CustomEvents (
document.dispatchEvent/addEventListener) - Backend: ASP.NET Core Kestrel server
- Styling: Modulær CSS struktur uden eksterne frameworks
- Bundling: esbuild for TypeScript transpilering og bundling
Arkitekturelle Principper
- Ingen global state - Alt state håndteres i de relevante managers
- Event-drevet kommunikation - Alle komponenter kommunikerer via DOM CustomEvents
- Modulær opbygning - Hver manager har et specifikt ansvarsområde
- Ren DOM manipulation - Ingen eksterne JavaScript frameworks (React, Vue, etc.)
- Custom HTML tags - Semantisk markup med custom elements
Implementerede Komponenter
Projektet følger en manager-baseret arkitektur, hvor hver manager er ansvarlig for et specifikt aspekt af kalenderen:
1. CalendarManager
Hovedkoordinator for alle managers
- Initialiserer og koordinerer alle andre managers
- Håndterer global konfiguration
- Administrerer kalender lifecycle
2. ViewManager
Håndterer kalendervisninger
- Skifter mellem dag/uge/måned visninger
- Opdaterer UI baseret på den valgte visning
- Renderer kalender grid struktur
3. NavigationManager
Håndterer navigation
- Implementerer prev/next/today funktionalitet
- Håndterer dato navigation
- Opdaterer week info (uge nummer, dato range)
4. EventManager
Administrerer events
- Håndterer event lifecycle og CRUD operationer
- Loader og synkroniserer event data
- Administrerer event selection og state
5. EventRenderer
Renderer events i DOM
- Positionerer events korrekt i kalender grid
- Håndterer event styling baseret på type
- Implementerer visual feedback for event interactions
6. DataManager
Håndterer data operationer
- Mock data loading for udvikling
- Event data transformation
- Data persistence interface
7. GridManager
Administrerer kalender grid
- Opretter og vedligeholder grid struktur
- Håndterer time slots og positioning
- Responsive grid layout
CSS Struktur
Projektet har en modulær CSS struktur for bedre organisering:
calendar-base-css.css- Grundlæggende styling og CSS custom propertiescalendar-components-css.css- UI komponenter og controlscalendar-events-css.css- Event styling og farvercalendar-layout-css.css- Layout struktur og gridcalendar-popup-css.css- Popup og modal stylingcalendar.css- Samlet styling fra POC (bruges i øjeblikket)
Kommende Funktionalitet
Baseret på projektstrukturen planlægges følgende komponenter:
Utilities
- PositionUtils - Konvertering mellem pixels og tidspunkter
- SnapUtils - Snap-to-interval funktionalitet
- DOMUtils - DOM manipulation utilities
Interaction Managers
- DragManager - Drag & drop funktionalitet for events
- ResizeManager - Resize funktionalitet for events
- PopupManager - Håndtering af event detaljer og popups
Feature Managers
- SearchManager - Søgefunktionalitet i events
- TimeManager - Current time indicator
- LoadingManager - Loading states og error handling
Avancerede Features
- Collision detection system for overlappende events
- Animation system for smooth transitions
- Event creation funktionalitet (double-click, drag-to-create)
- Multi-day event support
- Touch support for mobile enheder
- Keyboard navigation
Projekt Struktur
Calendar Plantempus/
├── src/ # TypeScript source files
│ ├── constants/ # Konstanter og enums
│ ├── core/ # Core funktionalitet
│ ├── managers/ # Manager klasser
│ ├── types/ # TypeScript type definitioner
│ └── utils/ # Utility funktioner
├── wwwroot/ # Static web assets
│ ├── css/ # Stylesheets
│ ├── js/ # Compiled JavaScript
│ └── index.html # Main HTML file
├── build.js # esbuild configuration
├── tsconfig.json # TypeScript configuration
├── package.json # Node.js dependencies
└── Program.cs # ASP.NET Core server
Kom i Gang
Forudsætninger
- .NET 8.0 SDK
- Node.js (for esbuild)
Installation
- Klon repository
- Installer dependencies:
npm install - Build TypeScript:
npm run build - Start server:
dotnet run - Åbn browser på
http://localhost:8000
Development
- Build TypeScript:
npm run build - Watch mode:
npm run watch(hvis konfigureret) - Start server:
dotnet run
Event System
Projektet bruger et event-drevet system hvor alle komponenter kommunikerer via DOM CustomEvents:
// Dispatch event
document.dispatchEvent(new CustomEvent('calendar:view-changed', {
detail: { view: 'week', date: new Date() }
}));
// Listen for event
document.addEventListener('calendar:view-changed', (event) => {
// Handle view change
});
Bidrag
Dette projekt følger clean code principper og modulær arkitektur. Når du bidrager:
- Følg den eksisterende manager-baserede struktur
- Brug event-drevet kommunikation mellem komponenter
- Undgå global state - hold state i relevante managers
- Skriv semantisk HTML med custom tags
- Brug modulær CSS struktur
Licens
[Specificer licens her]