import { browser } from '$app/environment'; import { fetchDensity, type DensityFilters } from '$lib/document/timeline'; import type { PageLoad } from './$types'; export const load: PageLoad = async ({ url, fetch, data }) => { const view = url.searchParams.get('view'); // Tailwind `lg` breakpoint — bars below this width fall under the 44×44 touch // target floor (Leonie's tablet finding) and the chart skips the fetch. const isDesktop = browser && window.matchMedia('(min-width: 1024px)').matches; // Forward active filters (excluding from/to) so the chart matches the list. const tagOp = url.searchParams.get('tagOp'); const filters: DensityFilters = { q: url.searchParams.get('q') ?? undefined, senderId: url.searchParams.get('senderId') ?? undefined, receiverId: url.searchParams.get('receiverId') ?? undefined, tags: url.searchParams.getAll('tag'), tagQ: url.searchParams.get('tagQ') ?? undefined, status: url.searchParams.get('status') ?? undefined, tagOp: tagOp === 'OR' ? 'OR' : 'AND' }; const density = await fetchDensity(fetch, view, isDesktop, filters); const zoomFrom = url.searchParams.get('zoomFrom'); const zoomTo = url.searchParams.get('zoomTo'); return { ...data, ...density, zoomFrom, zoomTo }; };