diff --git a/app/src/components/CapturesTab/DictationReadinessChecklist.tsx b/app/src/components/CapturesTab/DictationReadinessChecklist.tsx index a26e9655..0fd6279f 100644 --- a/app/src/components/CapturesTab/DictationReadinessChecklist.tsx +++ b/app/src/components/CapturesTab/DictationReadinessChecklist.tsx @@ -73,8 +73,20 @@ function progressPercent(task: ActiveDownloadTask | undefined): number | null { * * The chord stays disarmed until every row is green; this is what stops the * "stuck pill" failure mode of pressing the chord with a missing model. + * + * ``compact`` drops the centered title/subheading block and the + * empty-state max-width so the checklist can be embedded in a narrow + * sidebar alongside other settings. Callers own their own heading in + * that mode (typically an ``

`` that matches the surrounding sidebar + * section style). */ -export function DictationReadinessChecklist({ readiness }: { readiness: DictationReadiness }) { +export function DictationReadinessChecklist({ + readiness, + compact = false, +}: { + readiness: DictationReadiness; + compact?: boolean; +}) { const { t } = useTranslation(); const queryClient = useQueryClient(); const { toast } = useToast(); @@ -176,15 +188,17 @@ export function DictationReadinessChecklist({ readiness }: { readiness: Dictatio } return ( -
-
-

- {t('captures.readiness.title')} -

-

- {t('captures.readiness.subheading')} -

-
+
+ {!compact && ( +
+

+ {t('captures.readiness.title')} +

+

+ {t('captures.readiness.subheading')} +

+
+ )} {readiness.stt && (
+ {/* Same six-gate checklist the CapturesTab empty state uses. + Surfaces missing models / permissions persistently while + users configure this page, so a red gate can't hide behind + a green toggle. */} +
+

{t('captures.readiness.title')}

+ +
+

{t('settings.captures.sidebar.differencesTitle')}