feat: Themen-Inhaltsverzeichnis — Dashboard-Widget + dedizierte Seite /themen #664

Merged
marcel merged 13 commits from worktree-feat+issue-662-themen-inhaltsverzeichnis into main 2026-05-27 09:41:40 +02:00
Showing only changes of commit e6a0c2f6d6 - Show all commits

View File

@@ -59,37 +59,40 @@ const greetingText = $derived.by(() => {
<h1 class="font-serif text-[2rem] text-ink">{greetingText}</h1> <h1 class="font-serif text-[2rem] text-ink">{greetingText}</h1>
</div> </div>
{/if} {/if}
<div class="grid grid-cols-1 gap-5 lg:grid-cols-[1fr_320px] lg:items-start"> <div class="flex flex-col gap-5">
<div class="flex flex-col gap-5"> <DashboardResumeStrip resumeDoc={data.resumeDoc ?? null} />
<DashboardResumeStrip resumeDoc={data.resumeDoc ?? null} />
<EnrichmentBlock <ThemenWidget tags={data.tagTree ?? []} />
topDocs={data.incompleteDocs ?? []}
totalCount={data.incompleteTotal ?? 0}
bannerCount={bannerCount}
onBannerClose={() => (bannerCount = 0)}
/>
<section aria-label={m.dashboard_mission_caption()}> <div class="grid grid-cols-1 gap-5 lg:grid-cols-[1fr_320px] lg:items-start">
<h2 class="mb-3 font-sans text-xs font-bold tracking-widest text-ink-3 uppercase"> <div class="flex flex-col gap-5">
{m.dashboard_mission_caption()} <EnrichmentBlock
</h2> topDocs={data.incompleteDocs ?? []}
<MissionControlStrip totalCount={data.incompleteTotal ?? 0}
segmentationDocs={data.segmentationDocs ?? []} bannerCount={bannerCount}
transcriptionDocs={data.transcriptionDocs ?? []} onBannerClose={() => (bannerCount = 0)}
readyDocs={data.readyDocs ?? []}
weeklyStats={data.weeklyStats ?? null}
/> />
</section>
</div>
<div class="flex flex-col gap-5 lg:sticky lg:top-[80px]"> <section aria-label={m.dashboard_mission_caption()}>
<DashboardFamilyPulse pulse={data.pulse ?? null} /> <h2 class="mb-3 font-sans text-xs font-bold tracking-widest text-ink-3 uppercase">
<ThemenWidget tags={data.tagTree ?? []} compact={true} /> {m.dashboard_mission_caption()}
<DashboardActivityFeed feed={data.activityFeed ?? []} /> </h2>
{#if data.canWrite} <MissionControlStrip
<DropZone onUploadComplete={(count) => (bannerCount = count)} /> segmentationDocs={data.segmentationDocs ?? []}
{/if} transcriptionDocs={data.transcriptionDocs ?? []}
readyDocs={data.readyDocs ?? []}
weeklyStats={data.weeklyStats ?? null}
/>
</section>
</div>
<div class="flex flex-col gap-5 lg:sticky lg:top-[80px]">
<DashboardFamilyPulse pulse={data.pulse ?? null} />
<DashboardActivityFeed feed={data.activityFeed ?? []} />
{#if data.canWrite}
<DropZone onUploadComplete={(count) => (bannerCount = count)} />
{/if}
</div>
</div> </div>
</div> </div>
{/if} {/if}