From f51708d75aa18be8dfd30cbecfb7244834fd30b8 Mon Sep 17 00:00:00 2001 From: Till-JS <101404291+Till-JS@users.noreply.github.com> Date: Fri, 12 Dec 2025 12:15:01 +0100 Subject: [PATCH] fix(calendar): fix QuickEventOverlay z-index stacking issue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add portal action to move overlay to body, escaping parent stacking contexts - Set z-index: 99999 via inline style to ensure overlay appears above all UI elements - Remove z-index: 0 from main-content that was creating a stacking context - Overlay now correctly displays above DateStrip, Toolbar, and InputBar 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../apps/backend/src/event/event.service.ts | 10 ++++++++ apps/calendar/apps/web/src/lib/api/events.ts | 13 ++++++---- .../components/event/QuickEventOverlay.svelte | 16 +++++++++++-- .../apps/web/src/routes/(app)/+layout.svelte | 1 - .../shared-ui/src/quick-input/InputBar.svelte | 24 +++++++++---------- 5 files changed, 44 insertions(+), 20 deletions(-) diff --git a/apps/calendar/apps/backend/src/event/event.service.ts b/apps/calendar/apps/backend/src/event/event.service.ts index 6e80e89cc..bfd40249c 100644 --- a/apps/calendar/apps/backend/src/event/event.service.ts +++ b/apps/calendar/apps/backend/src/event/event.service.ts @@ -184,6 +184,16 @@ export class EventService { conditions.push(inArray(events.calendarId, query.calendarIds)); } + // Search filter - search in title and description + if (query.search) { + conditions.push( + or( + ilike(events.title, `%${query.search}%`), + ilike(events.description, `%${query.search}%`) + ) as any + ); + } + const result = await this.db .select({ event: events, diff --git a/apps/calendar/apps/web/src/lib/api/events.ts b/apps/calendar/apps/web/src/lib/api/events.ts index ad35c3040..1ce53b469 100644 --- a/apps/calendar/apps/web/src/lib/api/events.ts +++ b/apps/calendar/apps/web/src/lib/api/events.ts @@ -23,17 +23,22 @@ export async function getEvents(params: QueryEventsParams) { if (params.search) { searchParams.set('search', params.search); } - return fetchApi(`/events?${searchParams.toString()}`); + const result = await fetchApi<{ events: CalendarEvent[] }>(`/events?${searchParams.toString()}`); + if (result.error || !result.data) { + return { data: null, error: result.error }; + } + return { data: result.data.events, error: null }; } export async function searchEvents(query: string, limit: number = 10) { - // Search events within the next year - const now = new Date(); + // Search events within a wide range (1 year past to 1 year future) + const oneYearAgo = new Date(); + oneYearAgo.setFullYear(oneYearAgo.getFullYear() - 1); const oneYearFromNow = new Date(); oneYearFromNow.setFullYear(oneYearFromNow.getFullYear() + 1); return getEvents({ - startDate: now.toISOString(), + startDate: oneYearAgo.toISOString(), endDate: oneYearFromNow.toISOString(), search: query, }); diff --git a/apps/calendar/apps/web/src/lib/components/event/QuickEventOverlay.svelte b/apps/calendar/apps/web/src/lib/components/event/QuickEventOverlay.svelte index ce474e85d..1601f3697 100644 --- a/apps/calendar/apps/web/src/lib/components/event/QuickEventOverlay.svelte +++ b/apps/calendar/apps/web/src/lib/components/event/QuickEventOverlay.svelte @@ -8,6 +8,16 @@ import { de } from 'date-fns/locale'; import { tick, onMount, onDestroy } from 'svelte'; + // Portal action - moves element to body to escape stacking contexts + function portal(node: HTMLElement) { + document.body.appendChild(node); + return { + destroy() { + node.remove(); + }, + }; + } + interface Props { startTime?: Date; event?: CalendarEvent; @@ -465,9 +475,11 @@ +