Replace elastic snap behavior with smooth constant-speed scrolling:
- Use linear easing instead of ease-out (no deceleration at end)
- Add velocity tracking for momentum-based navigation
- Dynamic animation duration based on remaining distance (80-200ms)
- Fast swipes trigger immediate navigation regardless of position
- Lower threshold (15%) for easier page transitions
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Increase swipe threshold from 15% to 20% for more intentional navigation
- Reduce animation duration from 300ms to 200ms for snappier feel
- Reduce wheel debounce from 150ms to 100ms for faster response
- Simplify code by removing redundant comments
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The context menu was not properly blocking clicks on elements behind it
(like the calendar grid). Added a transparent backdrop overlay that
captures all clicks outside the menu and closes it properly.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove hardcoded autoFocus prop now that it's controlled by the
global InputBar settings store introduced in the context menu feature.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add InputBarContextMenu with settings toggles (syntax highlighting, auto-focus)
- Add InputBarHelpModal for keyboard shortcuts and syntax help
- Add inputBarSettings store with localStorage persistence
- Add recentInputHistory store for tracking used tags/references
- Integrate context menu in calendar app with default calendar selection
- Right-click on InputBar opens settings menu
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Export FilterDropdown and FilterDropdownOption from molecules
- Add hasFabLeft prop to InputBar for left-side FAB spacing
- Minor ThemePage formatting fix
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Components:
- Simplify ContactDetailModal and NewContactModal
- Enhance ContactsToolbarContent with expanded functionality
- Add AlphabetNavContextMenu for alphabet navigation
- Add SocialMediaLinks component for displaying social links
- Add SocialMediaFields form component
- Add ContactNetworkView as integrated network visualization
- Improve skeleton components with shared utilities
API & Config:
- Add centralized API client module
- Refactor contacts API with better error handling
- Add social-media configuration module
- Update batch and config modules
Stores:
- Simplify filter store
- Update settings and user-settings stores
- Clean up view-mode store
- Minor auth store updates
Routes:
- Update layout with simplified navigation
- Minor updates to settings, statistics pages
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove NetworkToolbar and NetworkToolbarContent components
- Remove standalone network visualization page
- Remove dedicated new contact page
Network view integrated into main contacts; new contact via modal.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace native select with FilterDropdown in AgendaFilters
- Add view options to DateStripContextMenu
- Improve EventForm layout and styling
- Enhance QuickEventOverlay with better time handling
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add virtual birthday calendar to calendars store
- Create DateStripFab component for collapsed date strip mode
- Add dateStripCollapsed setting support in layout
- Adjust InputBar positioning for FAB visibility
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a View Mode Pill component next to the toolbar FAB that allows quick
switching between calendar views. Users can configure which views appear
in the quick switcher via right-click context menu.
- Add ViewModePill component with icons for each view type
- Add ViewModePillContextMenu for configuring visible views
- Add quickViewPillViews setting (default: week, month, agenda)
- Position pill to the left of the toolbar FAB
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create useBirthdayPopover composable to eliminate duplicated birthday
popover state and handlers across DayView, WeekView, and MonthView.
Changes:
- Add useBirthdayPopover.svelte.ts composable
- Update DayView to use the composable
- Update WeekView to use the composable
- Update MonthView to use the composable
- Export from composables/index.ts
This removes ~40 lines of duplicated code across the three views.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a transparent minimize button at the left edge of the DateStrip that
allows quick collapsing to FAB without needing the context menu.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create reusable composables for calendar event and task drag/drop:
- useEventDragDrop: Event drag and resize with document-level listeners
- useTaskDragDrop: Task drag and resize (updated to match new API)
- useSidebarDrop: Sidebar task drop handling
- useCalendarKeyboard: Keyboard shortcut handling (Escape to cancel)
These composables extract ~600 lines of duplicated logic from
WeekView, DayView, and MultiDayView. Integration into views will
be done in a follow-up commit.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move type exports from .svelte files to separate .types.ts files
(FilterDropdown, CommandBar) to prevent SSR hydration issues
- Replace direct NetworkGraph component import in network store
with TypeScript interface to avoid SSR component instantiation
- Add missing shared packages to vite.config.ts ssr.noExternal
and optimizeDeps.exclude (splitscreen, i18n, profile-ui, etc.)
The hydration error "Cannot read properties of undefined (reading 'call')"
was caused by Svelte 5's stricter handling of component imports in
.svelte.ts files and type exports from .svelte files during SSR.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 1 of calendar refactoring:
- Create calendarConstants.ts with HOUR_HEIGHT_PX, SNAP_INTERVAL_MINUTES, etc.
- Create eventFiltering.ts with reusable filter functions:
- getVisibleTimedEvents, getVisibleAllDayEvents, getVisibleOverflowEvents
- filterByVisibleCalendars, filterByHourRange, getEventMinutes
- Update WeekView, DayView, MultiDayView, MonthView to use new utilities
- Remove ~200 lines of duplicated filtering logic
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add birthdaysStore to fetch and manage birthdays from contacts API
- Add BirthdayPopover component with contact details and link to contacts app
- Integrate birthdays into WeekView, MonthView, and DayView as all-day events
- Add settings for showBirthdays and showBirthdayAge toggles
- Add reactive $effect in layout to load birthdays when setting is enabled
- Add /contacts/birthdays endpoint to contacts backend
- Configure PUBLIC_CONTACTS_API_URL env variable for calendar app
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add isAlphabetNavCollapsed state to filter store with persistence
- Implement FAB button (left of InputBar) to toggle alphabet navigation
- Add dynamic positioning for alphabet-nav based on toolbar state
- Fix ContactsToolbar view-mode-pill positioning to align with FAB
- Refactor ContactsToolbar to use ExpandableToolbar's fixed positioning
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Migrate network page from custom floating NetworkControls to the shared
ExpandableToolbar component, matching the homepage toolbar behavior.
Changes:
- Add NetworkToolbar and NetworkToolbarContent components
- Extend networkStore with toolbar state and zoom control methods
- Register graphComponent in store for toolbar zoom access
- Remove floating NetworkControls from network page
- Add toolbar rendering for /network route in layout
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove subtitle from new contact card for cleaner appearance
- Make new contact card full width to match list items
- Fix sticky section headers position (top: 8px instead of 80px)
- Update alphabet nav styling with glass blur effect
- Add container queries for responsive centering
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add optional calendar week (KW) display setting for the DateStrip component.
Week numbers appear above the first day of each week without affecting spacing.
- Add dateStripShowWeekNumbers setting to settings store
- Implement week number label in DateStrip with responsive styling
- Add toggle to DateStripContextMenu for easy access
- Respects weekStartsOn setting for correct week start detection
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add setAsDefault function to calendars store
- Redesign calendar edit form with better input styling
- Use shared SettingsSection and SettingsCard components
- Add sticky pill headers with icons for all sections
- Increase spacing between sections (2rem gap)
- Add plus icon to "Neuer Kalender" button
- Style improvements for consistency with GlobalSettingsSection
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Events are now filtered based on the calendar visibility setting in
all view components (WeekView, DayView, MultiDayView, MonthView,
AgendaView). When a calendar is hidden via the toolbar toggle, its
events are no longer displayed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace select dropdown with horizontal scrolling pill buttons in QuickEventOverlay
- Each pill shows colored dot + calendar name for quick visual selection
- Add setAsDefault method to calendars store
- Improve settings page calendar editing with SettingsSection/SettingsCard components
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add new ConfirmationPopover wrapper component in shared-ui
- Uses portal pattern to escape overflow constraints
- Supports danger/warning/info variants with appropriate styling
- Uses elevation-3 for proper layering above overlays
- Integrate in QuickEventOverlay for delete confirmation
- Fix parseISO bug in QuickEventOverlay (was not imported)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add resizeOffsetMinutes to track the difference between the snapped
click position and the actual event boundary. This prevents events
from immediately jumping when starting to resize via the top or
bottom handles.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move all-day events row below day headers for better visual hierarchy
- Wrap day-headers and all-day-row in sticky container to eliminate gap
- Make all-day events use full available width
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 3-level elevation CSS variables to themes.css for all theme variants
- elevation-1: dropdowns, pills (16% in dark mode)
- elevation-2: modals, overlays (20% in dark mode)
- elevation-3: context menus, tooltips (24% in dark mode)
- Update ContextMenu to use elevation-3
- Update Modal to use elevation-2 with theme-aware borders
- Update QuickEventOverlay to use elevation-2 with matching footer
- Update PillTimeRangeSelector dropdown to use elevation-1
- Update ConfirmationModal and FormModal to use theme variables
- Remove shadows from overlay components for cleaner look
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add ResponsiblePerson interface to shared types
- Create ResponsiblePersonSelector component with contact integration
- Integrate responsible person selector into EventForm
- Add people selectors to QuickEventOverlay with compact layout
- Fix click-outside detection for elements removed from DOM
- Support both contacts app integration and manual email entry
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- InputBar: use --color-primary, --color-surface, --color-border for
focus ring, backgrounds, and syntax highlighting
- PillToolbarButton: active state uses --color-primary
- PillViewSwitcher: sliding indicator and active text use theme colors
- PillTimeRangeSelector: all glass effects and active states themed
- CalendarToolbar: FAB active state uses theme colors
- CalendarToolbarContent: removed hardcoded primaryColor prop
- DateStrip: replaced all #3b82f6 with theme variables
All UI components now automatically adapt to the selected theme
(Ocean, Sunset, Forest, etc.)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add oncontextmenu handler to event-pill in MonthView
- Add oncontextmenu handler to event-card in MultiDayView
- Move EventContextMenu to layout level for proper z-index stacking
- Context menu now appears above DateStrip and other fixed elements
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add reusable ContextMenu component to shared-ui with icon support
- Create EventContextMenu for calendar with actions:
- Edit, Duplicate, Change Calendar, Change Color
- Export to .ics, Delete with confirmation
- Integrate context menu in DayView, WeekView, and AgendaView
- Fix event creation not showing success/error feedback
- Fix events store to properly handle API response format
- Add API logging for debugging event operations
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add hasFabRight prop to InputBar for mobile FAB spacing
- InputBar leaves space for FAB on screens under 900px
- Change active FAB style to subtle muted colors instead of bright blue
- Support dark mode for active FAB state
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add CSS mask-image gradient to fade out dates at the left and right
edges of the DateStrip, creating a smoother visual scroll indicator.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added overflow-x: auto with hidden scrollbar
- Max-width constraint to prevent overflow
- Smooth touch scrolling for mobile devices
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Increased InputBar bottomOffset from 130px to 150px when toolbar is open
- Updated FAB position to match (150px + 9px)
- Updated DateStrip positions accordingly (220px, 150px)
- Removed ineffective padding-top from toolbar-bar
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added 5rem padding-top to toolbar-bar for visual separation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- FAB now has same height as InputBar (54px instead of 44px)
- Adjusted vertical position to align perfectly with InputBar
- Increased icon size to 1.5rem for better visibility
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>