Commit graph

622 commits

Author SHA1 Message Date
Till-JS
cc28cc739e feat(calendar): add birthday calendar and collapsible date strip
- 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>
2025-12-14 21:29:58 +01:00
Till-JS
0badca21ae feat(calendar): add configurable ViewModePill for quick view switching
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>
2025-12-14 21:29:03 +01:00
Till-JS
b966c91c32 refactor(calendar): extract EventCard component from views
- Create EventCard component encapsulating event block with resize handles
- Create TimeColumn component for hour labels (not yet integrated)
- Create OverflowIndicator component for overflow events (not yet integrated)
- Integrate EventCard into DayView (154 lines reduced)
- Integrate EventCard into WeekView (166 lines reduced)
- Remove duplicate event-card styles from both views

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 21:26:32 +01:00
Till-JS
668957a30b refactor(calendar): extract birthday popover logic into composable
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>
2025-12-14 21:18:50 +01:00
Till-JS
e0ef15276d feat(calendar): add minimize button to DateStrip
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>
2025-12-14 21:17:22 +01:00
Till-JS
5bf275d9d0 refactor(calendar): add comprehensive drag/drop composables
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>
2025-12-14 21:13:58 +01:00
Till-JS
026c1654e3 fix(contacts): resolve Svelte 5 hydration error
- 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>
2025-12-14 21:13:22 +01:00
Till-JS
c4fe9ea192 refactor(calendar): extract shared constants and event filtering utilities
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>
2025-12-14 21:07:52 +01:00
Till-JS
cdc3cd3ec8 feat(calendar): add birthday integration from contacts service
- 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>
2025-12-14 20:49:08 +01:00
Till-JS
4b6a4c73ae feat(contacts): add collapsible alphabet-nav with FAB toggle
- 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>
2025-12-14 19:42:38 +01:00
Till-JS
68626227e0 feat(contacts): unify network page toolbar with ExpandableToolbar pattern
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>
2025-12-14 16:32:59 +01:00
Till-JS
3f27e477dd fix(contacts): improve new contact card and sticky section headers
- 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>
2025-12-14 16:31:38 +01:00
Till-JS
d76f2ddcf1 style: format NewContactModal component
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 16:18:00 +01:00
Till-JS
6ce385a42e style: apply formatting fixes from pre-commit hooks
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 16:16:29 +01:00
Till-JS
863f296733 feat(ui): add shared ExpandableToolbar and unify toolbar dropdowns
- Create ExpandableToolbar shared component in shared-ui
- Migrate CalendarToolbar to use shared component (253 → 90 LOC)
- Migrate ContactsToolbar to use shared component (177 → 31 LOC)
- Add portal pattern to FilterBar dropdown for proper positioning
- Unify FilterBar dropdown styling with ContextMenu design
- Add fly transition with offset for smooth dropdown appearance
- Add ContactsToolbarContent for toolbar content separation
- Add filter store for contacts filter state management
- Add NewContactModal component
- Various contacts view improvements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 16:14:30 +01:00
Till-JS
9eb3f42483 feat(calendar): add week number display to DateStrip
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>
2025-12-14 15:35:51 +01:00
Till-JS
7bbeb7c13d feat(calendar): improve settings page UI and add default calendar selection
- 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>
2025-12-14 15:22:44 +01:00
Till-JS
4098283350 feat(calendar): filter events by calendar visibility
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>
2025-12-14 15:22:03 +01:00
Till-JS
b720f64d2f feat(calendar): replace calendar dropdown with horizontal pills
- 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>
2025-12-14 15:19:22 +01:00
Till-JS
5190b1449a feat(ui): add ConfirmationPopover component for inline confirmations
- 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>
2025-12-14 15:09:16 +01:00
Till-JS
cab1905a2c fix(calendar): prevent event resize jump on drag start
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>
2025-12-14 15:07:43 +01:00
Till-JS
6bea47d4da refactor(calendar): consolidate code patterns and reduce duplication
- Add useVisibleHours composable for shared hour filtering logic
- Replace 60+ parseISO patterns with centralized toDate() utility
- Remove legacy toast.ts store (keep only Svelte 5 runes version)
- Standardize searchStore from class to object pattern
- Remove debug console.logs from API clients

Affected views: WeekView, MultiDayView, DayView, AgendaView, YearView
Affected components: EventForm, EventDetailModal, QuickEventOverlay, AgendaItem
Affected stores: events, search, toast

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-14 14:39:27 +01:00
Till-JS
c710f43391 feat(calendar): add DateStrip context menu with display settings
- Add context menu for DateStrip with toggle switches for:
  - Moon phases visibility
  - Event indicators visibility
  - Weekday names visibility
  - Weekend highlighting (subtle background color)
  - Month divider lines (spacing always present, line toggleable)
  - Compact mode
- Add glass effect to "Today" button matching PillNav styling
- Add toggle switch support to shared ContextMenu component
- Persist all settings to localStorage with cloud sync support

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 15:06:41 +01:00
Till-JS
2777447ae8 fix(calendar): improve all-day events row positioning and styling
- 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>
2025-12-13 15:05:11 +01:00
Till-JS
bd89871f8b feat(ui): add elevation system for overlays and modals
- 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>
2025-12-13 15:00:33 +01:00
Till-JS
8eb295d491 feat(calendar): add responsible person and attendees to events
- 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>
2025-12-13 14:53:53 +01:00
Till-JS
88c91e22b0 fix(ui): replace hardcoded colors with theme variables
- 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>
2025-12-13 14:40:16 +01:00
Till-JS
a1c3eafee6 feat(calendar): add context menu support to MonthView and MultiDayView
- 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>
2025-12-13 14:34:22 +01:00
Till-JS
10d4170ee8 feat(calendar): add event context menu and fix event persistence
- 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>
2025-12-13 14:24:08 +01:00
Till-JS
cc37db8072 feat(calendar): improve FAB positioning on mobile and subtle close styling
- 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>
2025-12-13 14:04:51 +01:00
Till-JS
faa94129c5 style(calendar): add fade effect to DateStrip edges
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>
2025-12-13 14:02:30 +01:00
Till-JS
e8ec273355 feat(calendar): make toolbar content horizontally scrollable on mobile
- 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>
2025-12-13 13:57:28 +01:00
Till-JS
5ebdc35204 style(calendar): reduce toolbar spacing slightly (150px → 140px)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 13:56:18 +01:00
Till-JS
ef69274cb0 fix(calendar): increase spacing between InputBar and toolbar correctly
- 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>
2025-12-13 13:55:13 +01:00
Till-JS
15b2d5d9ac style(calendar): increase spacing between InputBar and toolbar to 8rem
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 13:52:34 +01:00
Till-JS
4444e895c5 style(calendar): add more spacing between InputBar and toolbar
- 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>
2025-12-13 13:51:21 +01:00
Till-JS
7d1666496b style(calendar): align FAB with InputBar height and position
- 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>
2025-12-13 13:50:42 +01:00
Till-JS
11da7d22a7 fix(calendar): toolbar opens below InputBar and pushes content up
- Toolbar panel now appears below InputBar (between InputBar and PillNav)
- When expanded, InputBar, FAB and DateStrip all shift up together
- Added isToolbarExpanded prop to DateStrip for dynamic positioning
- FAB stays aligned with InputBar at all times
- Smooth 200ms transitions for all position changes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 21:58:26 +01:00
Till-JS
4d1db202c0 feat(calendar): convert toolbar to collapsed FAB next to InputBar
- CalendarToolbar is now collapsed by default as a FAB button
- FAB positioned right next to the QuickInputBar
- Toolbar panel opens above on click with smooth slide animation
- Reduced bottom padding since toolbar no longer takes full width
- DateStrip position adjusted to be closer to InputBar
- Updated localStorage logic (default is now collapsed)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 21:55:07 +01:00
Till-JS
502ba0c6b9 ♻️ refactor(calendar): integrate agenda as view type and improve DayView layout
- Add AgendaView component as integrated calendar view type
- Add 'agenda' option to view type selector in toolbar
- Remove separate /agenda route (now accessible via view switcher)
- Redesign DayView for better wide-screen display:
  - Center content with max-width constraints
  - Narrower events (max-width 400px)
  - Better positioned time labels
- Fix overflow handling in all calendar views
2025-12-12 21:51:05 +01:00
Till-JS
b7057ed8fc feat(calendar): improve DateStrip today button and fix initial date display
- Move today button next to month label (left side, without shifting layout)
- Add current date display below "Heute" label
- Style button as pill-shaped with blue accent colors
- Widen DateStrip container for better layout
- Fix month label to have fixed min-width to prevent layout jumps
- Fix initial date not showing correctly on page reload by:
  - Using instant scroll on mount instead of smooth
  - Calling updateVisibleMonth() after scroll completes
  - Initializing visibleMonth with today's date

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 21:36:19 +01:00
Nils Weiser
35ce678764
Merge pull request #17 from Memo-2023/chat-picture
Chat picture
2025-12-12 20:56:59 +01:00
Wuesteon
612f6a10ef 🔧 chore: switch chat backend to OpenRouter API
- Replace Azure OpenAI and Google Gemini with OpenRouter API
- Update generate-env.mjs to use OPENROUTER_API_KEY
- Remove temporary doc_nils.md file

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-12 20:50:03 +01:00
Wuesteon
a9aeffabb1 ♻️ refactor(picture): simplify credit system to production-only
- Remove freemium model (3 free generations per user)
- Credit check now only enforced in production (not staging)
- Add HTTPS detection for webhook mode fallback
- Simplify GenerateResponse (remove freeGenerationsRemaining)
- Clean up async generation metadata handling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-12 20:49:38 +01:00
Wuesteon
3f9bc5761b ♻️ refactor(chat): simplify chat service and update seed data
- Remove unused code from chat.service.ts
- Simplify seed.ts with fewer AI models
- Update CLAUDE.md documentation
- Update .env.example
- Remove unused package dependency
- Minor UI fix in chat page
2025-12-12 20:48:10 +01:00
Wuesteon
0fa154c7d6 🐛 fix(shared-auth): add automatic token refresh on 401 responses
- Add backendUrl parameter to initializeWebAuth() for interceptor config
- Expand isTokenExpiredResponse() to match more error patterns:
  - "invalid token", "token validation failed", "claim" (jose errors)
  - ERR_JWT_EXPIRED error code
- Update all web apps to pass backendUrl for automatic refresh:
  - picture (3006), chat (3002), zitare (3007), contacts (3015)
  - calendar (3014), clock (3017), todo (3018)
- Fix API client default port in picture web app

This prevents users from being randomly signed out when JWT expires.
The interceptor now catches 401 responses and automatically refreshes
the token before retrying the request.
2025-12-12 20:47:43 +01:00
Nils Weiser
b44e515507
Merge pull request #16 from Memo-2023/till-dev
feat: calendar improvements, split-screen, contacts integration, and theme refactoring
2025-12-12 14:54:12 +01:00
Wuesteon
4357902d33 Merge remote-tracking branch 'origin/dev' into till-dev 2025-12-12 14:12:14 +01:00
Till-JS
b3490833fa fix(calendar): add shared-splitscreen to Dockerfile
The calendar web app imports @manacore/shared-splitscreen but it was
missing from the Docker build context, causing the build to fail.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 13:25:42 +01:00
Till-JS
81f77c424c feat(calendar): improve navigation layout controls and sidebar integration
- Add layout control icons (sidebar/bottom-bar) for better UX
- Position FABs on right side for consistent minimization direction
- Fix app switcher dropdown direction (opens up when nav at bottom)
- Add isToolbarCollapsed store for toolbar state management
- Create CalendarToolbarContent component for reusable toolbar elements
- Improve sidebar toolbar integration with proper vertical layout
- Hide PillViewSwitcher sliding indicator in vertical mode
- Add scrollbar to sidebar toolbar content
- Ensure all toolbar buttons are full-width and left-aligned in sidebar

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 13:13:45 +01:00