Adds the full-width 3-column collaboration widget below the existing
dashboard grid. Renders without the backend running (Promise.allSettled
isolation keeps failures silent).
Components (src/lib/components/):
- ExpertBadge.svelte — purple pill with icon, no props
- SegmentationColumn.svelte — col 1: links to /enrich/{id}, weekly pulse
- TranscriptionColumn.svelte — col 2: per-doc progress bar when blocks exist
- ReadyColumn.svelte — col 3: mint border when filled, dashed empty state
- MissionControlStrip.svelte — strip wrapper, 1-col mobile / 3-col sm+
i18n: 19 new keys added to de/en/es (mission_control_*)
Page wiring:
- +page.server.ts: 4 new Promise.allSettled calls for segmentation-queue,
transcription-queue, ready-to-read, weekly-stats; all failures silent
- +page.svelte: MissionControlStrip rendered below the grid in isDashboard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
46 lines
1.4 KiB
Svelte
46 lines
1.4 KiB
Svelte
<script lang="ts">
|
|
import * as m from '$lib/paraglide/messages.js';
|
|
import SegmentationColumn from './SegmentationColumn.svelte';
|
|
import TranscriptionColumn from './TranscriptionColumn.svelte';
|
|
import ReadyColumn from './ReadyColumn.svelte';
|
|
|
|
type TranscriptionQueueItemDTO = {
|
|
id: string;
|
|
title: string;
|
|
documentDate?: string;
|
|
needsExpert: boolean;
|
|
annotationCount: number;
|
|
textedBlockCount: number;
|
|
reviewedBlockCount: number;
|
|
};
|
|
|
|
type TranscriptionWeeklyStatsDTO = {
|
|
segmentationCount: number;
|
|
transcriptionCount: number;
|
|
readyCount: number;
|
|
};
|
|
|
|
interface Props {
|
|
segmentationDocs: TranscriptionQueueItemDTO[];
|
|
transcriptionDocs: TranscriptionQueueItemDTO[];
|
|
readyDocs: TranscriptionQueueItemDTO[];
|
|
weeklyStats: TranscriptionWeeklyStatsDTO | null;
|
|
}
|
|
|
|
let { segmentationDocs, transcriptionDocs, readyDocs, weeklyStats }: Props = $props();
|
|
</script>
|
|
|
|
<section class="mt-4 rounded-sm border border-line bg-white p-6">
|
|
<h2 class="mb-4 font-sans text-xs font-bold tracking-widest text-gray-400 uppercase">
|
|
{m.mission_control_heading()}
|
|
</h2>
|
|
<div class="grid grid-cols-1 gap-4 sm:grid-cols-3">
|
|
<SegmentationColumn docs={segmentationDocs} weeklyCount={weeklyStats?.segmentationCount ?? 0} />
|
|
<TranscriptionColumn
|
|
docs={transcriptionDocs}
|
|
weeklyCount={weeklyStats?.transcriptionCount ?? 0}
|
|
/>
|
|
<ReadyColumn docs={readyDocs} weeklyCount={weeklyStats?.readyCount ?? 0} />
|
|
</div>
|
|
</section>
|