From 3edb65c2c3b1b378a67d4455500526ea5f870fe4 Mon Sep 17 00:00:00 2001 From: Till-JS <101404291+Till-JS@users.noreply.github.com> Date: Mon, 15 Dec 2025 02:54:10 +0100 Subject: [PATCH] feat(calendar): add number labels to ViewSwitcher and extended day views MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace icons with number labels (1, 3, 5, 7, 10, 14, 30, 60, 90, 365, M, Y, L) - Add new standard view types: 30day, 60day, 90day, 365day - Add 3day view as standard option - Add custom day range input (1-365 days) in context menu - Update PillTabGroup to show labels when no icon is provided - Change MultiDayView dayCount prop from union to number type - Add ultra-compact class for views with 14+ days 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../components/calendar/MultiDayView.svelte | 63 ++- .../components/calendar/ViewCarousel.svelte | 24 ++ .../calendar/ViewModePillContextMenu.svelte | 378 ++++++++++++++++-- .../web/src/lib/stores/settings.svelte.ts | 23 ++ .../apps/web/src/lib/stores/view.svelte.ts | 85 +++- .../apps/web/src/lib/utils/dateNavigation.ts | 21 + .../apps/web/src/routes/(app)/+layout.svelte | 60 ++- .../packages/shared/src/types/calendar.ts | 34 +- .../src/navigation/PillTabGroup.svelte | 2 +- 9 files changed, 627 insertions(+), 63 deletions(-) diff --git a/apps/calendar/apps/web/src/lib/components/calendar/MultiDayView.svelte b/apps/calendar/apps/web/src/lib/components/calendar/MultiDayView.svelte index d48e11b16..cc5787666 100644 --- a/apps/calendar/apps/web/src/lib/components/calendar/MultiDayView.svelte +++ b/apps/calendar/apps/web/src/lib/components/calendar/MultiDayView.svelte @@ -42,7 +42,7 @@ // Props interface Props { - dayCount: 5 | 10 | 14; + dayCount: number; /** Optional date override for carousel navigation (uses viewStore.currentDate if not provided) */ date?: Date; onQuickCreate?: (date: Date, position: { x: number; y: number }) => void; @@ -105,7 +105,8 @@ let columnClass = $derived.by(() => { if (days.length <= 5) return 'normal'; if (days.length <= 10) return 'compact'; - return 'very-compact'; + if (days.length <= 14) return 'very-compact'; + return 'ultra-compact'; }); // ========== Drag & Drop State ========== @@ -823,6 +824,7 @@ class="multi-day-view" class:compact={columnClass === 'compact'} class:very-compact={columnClass === 'very-compact'} + class:ultra-compact={columnClass === 'ultra-compact'} >