The openspec/ directory is now gitignored and removed from
the repository index while kept locally. This prevents
OpenSpec working artifacts from being pushed to GitHub.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Fix events displaying with +1h offset (e.g. 14h→15h) caused by
icsDateToJsDate() returning fake UTC (local.date) which then got
the browser offset applied again by dateToLocalISOString().
Changes:
- Return true UTC (icsDate.date) from icsDateToJsDate() instead of
fake UTC (local.date)
- Add getDateComponentsInTimezone() using Intl.DateTimeFormat with
formatter caching for correct cross-timezone write path
- Refactor jsDateToIcsDate() to use Intl instead of isFakeUtc flag
- Replace optimistic updates with refetchEvents() after modal save
to avoid fake UTC leaking into the display path
- Align standalone helper jsDateToIcsDate() with adapter conversion
- Narrow useCallback dependencies in useSchedulerHandlers
- Remove dead code addDurationToDate()
- Add 42 timezone conversion tests covering DST transitions,
cross-timezone round-trips, half-hour/45min offsets
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add proposal, design, specs and tasks for the fix-timezone-double-conversion
change. Documents the root cause (icsDateToJsDate returning fake UTC causing
double browser offset), the Intl.DateTimeFormat-based solution, and 40+
test scenarios covering DST, cross-timezone, half-hour offsets, and
round-trip conversions.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace static logo divs with DynamicCalendarLogo component in:
- Header.tsx: header variant for main navigation
- index.tsx: both header and icon variants for home page
- calendar.tsx: header variant for calendar page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create a React component that displays the calendar logo with
the current day number overlaid dynamically.
Features:
- Two variants: "header" (full logo) and "icon" (icon only)
- Day number positioned with CSS overlay
- Client-side rendering to avoid SSR hydration issues
- Translated alt text using i18n
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add two SVG files for the calendar logo:
- cal_logotype_text_no_number.svg: full logo with "Calendriers" text
- cal_icon_no_number.svg: icon-only version
Both versions have no day number, allowing dynamic overlay.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Enable sticky header by setting height: 100% on .ec
- Scroll to current time on calendar initialization
- Parallelize CalDAV event fetching with Promise.all
- Use event-handler-refs pattern for stable callbacks
- Import shared CalendarApi interface from types
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Display day-of-week before day-of-month in calendar column headers
for better visual hierarchy.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Integrate SchedulerToolbar component above calendar container
- Disable native headerToolbar in useSchedulerInit
- Add toolbar state (currentView, viewTitle) to Scheduler
- Use datesSet callback to sync toolbar with calendar navigation
- Update CalendarContext to use CalendarApi type for better type safety
- Pass calendarRef to toolbar for API method access
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create custom React toolbar for EventCalendar replacing native toolbar:
- Today button to navigate to current date
- Previous/Next navigation buttons with icons
- Dynamic period title synced with calendar view
- Custom dropdown menu for view selection (Day/Week/Month/List)
- Full keyboard accessibility (Escape, Arrow keys, Enter, Tab)
- CalendarApi interface for type-safe calendar interactions
- Responsive layout with Cunningham design system
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create scheduler-theme.scss to align @event-calendar/core with
La Suite design system (Cunningham):
- Map --ec-* CSS variables to Cunningham tokens
- Hide native toolbar (replaced by custom React toolbar)
- Style today indicator with bordered frame (no fill)
- Style events with 6px border-radius, no shadow
- Style now indicator with brand-500 color
- Remove intermediate 30-min grid lines
- Unify header zone (ec-col-head + ec-all-day)
- Add border to grid body
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Regenerate Cunningham tokens with latest design system values.
This provides updated CSS variables for theming.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace the old .claude/commands/openspec/ structure with the new
opsx commands and skills system for better spec-driven development
workflow.
- Remove old openspec commands (apply, archive, proposal)
- Add new opsx commands with enhanced capabilities
- Add Claude Code skills for openspec workflows
- Clean up AGENTS.md and CLAUDE.md from openspec instructions
- Remove openspec/AGENTS.md (no longer needed)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove all console.log debug statements from production code
- Fix useEffect dependency arrays (remove refs, fix dependency cycles)
- Add useMemo for sharedCalendars filtering in CalendarList
- Improve error handling in handleOpenSubscriptionModal
- Add proper cleanup pattern (isMounted) in CalendarContext
- Use i18n locale instead of hardcoded French in MiniCalendar
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Fix return type for respondToInvitation method to properly
wrap response in data property as expected by CalDavResponse.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add CLAUDE.md for AI assistant guidance. Add documentation
for PR split plan, implementation checklist, and recurrence
feature specifications.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add OpenSpec workflow for AI-assisted change proposals
including proposal templates, archive commands, and
project configuration.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add end-to-end tests for calendar functionality including
locale switching and calendar operations.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add DavClient utility for creating authenticated CalDAV
client instances with proper configuration.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove deprecated open-calendar package. Functionality has
been migrated to src/features/calendar/services/dav with
improved architecture and TypeScript support.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update calendar page to use new Scheduler and CalendarContext.
Update styles, error pages, and app wrapper for new components.
Minor updates to Header, Toaster and Feedback components.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove deprecated UI components (breadcrumbs, circular-progress,
infinite-scroll, info, responsive) and unused hooks (useCopyToClipboard,
useLayout, RhfInput) that are no longer needed.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update component index exports for new Scheduler and
CalendarList. Update Next.js config and Dockerfile for
CalDAV dependencies.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove old CalendarView, CalendarList, EventModal and
CreateCalendarModal replaced by new Scheduler and
CalendarList implementations.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update theme customization hook and CalendarList styles
for improved visual consistency and dark mode support.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Minor updates to LoginButton and LogoutButton components
for consistency with new design system.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update API functions and types for subscription management
and iCal export. Add fetchApi improvements for error handling.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update LeftPanel to use new CalendarList and MiniCalendar
components with CalendarContext integration.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update MiniCalendar for integration with CalendarContext
and improved locale support for date navigation.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Improve RecurrenceEditor with better RRULE parsing, support
for all recurrence patterns (daily, weekly, monthly, yearly)
and cleaner UI with Cunningham components.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add component for managing event attendees with email
validation, autocomplete and participation status display.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add CalendarList component for managing user calendars with
visibility toggles, color customization and CalDAV sync.
Replaces previous monolithic implementation.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add modular subcomponents for CalendarList including item
menu, list item, create/edit modal, delete confirmation
and subscription URL display modals.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add TypeScript types for CalendarList component state and
props. Add color palette constants and custom hook for
managing calendar list state.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add Scheduler component integrating FullCalendar for event
display with day/week/month views, drag-drop support and
CalDAV synchronization via CalendarContext.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add EventModal for creating and editing events with support
for recurrence, attendees and all-day events. Add DeleteEventModal
with options for recurring event deletion scope.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add date formatting utilities and custom hooks for
Scheduler initialization and event handlers including
drag-drop, resize and click operations.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add TypeScript type definitions for Scheduler component
including event props, modal states, and handler signatures.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add internationalization strings for Scheduler, CalendarList,
event modals and calendar operations in French and English.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add useCalendars hook for CalDAV calendar management and
useCalendarLocale for locale-aware date formatting.
Remove obsolete modal hooks replaced by Scheduler.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add React context for managing calendar state including
selected calendars, events, CalDAV service instance and
synchronization status.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add Jest unit tests for CalDAV helper functions, ICS
parsing/generation and event-calendar conversions.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add EventCalendarAdapter for converting between CalDAV
events and scheduler-compatible format. Include VCard
component for contact handling in calendar invitations.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>