fix(coach): label the quick-settings fields alike and give the lookback full width

The model fields carried the form label's colon and the lookback picker
an uppercase section-style label and a fit-content 36 px trigger. All four
fields now share one unadorned label and the full-width 44/40 px control.
This commit is contained in:
Marc-André Bombeck committed 2026-10-05 08:11:09 +02:00
1 parent a2ef2eec24
commit 07f4961f27
3 files changed
+14 -10

No files matched your search

@@ -212,7 +212,7 @@ export function CoachModelPicker() {
return (
<div data-slot="coach-model-picker" className="flex flex-col gap-4">
<div>
<Label htmlFor="coach-quick-provider">
<Label htmlFor="coach-quick-provider" noColon>
{t("insights.coach.frame.provider")}
</Label>
<NativeSelect
@@ -241,7 +241,7 @@ export function CoachModelPicker() {
{model.kind === "preset" ? (
<div>
<Label htmlFor="coach-quick-model">
<Label htmlFor="coach-quick-model" noColon>
{t("settings.ai.modelLabel")}
</Label>
<NativeSelect
@@ -284,6 +284,7 @@ export function CoachModelPicker() {
{reasoning ? (
<ReasoningEffortField
id="coach-quick-reasoning"
noColon
value={reasoning.value}
onChange={(next) => patchProvider.mutate({ [reasoning.field]: next })}
/>
@@ -324,7 +325,7 @@ function GatewayModelField({
if (changed) onSave(draft.trim() || null);
}}
>
<Label htmlFor="coach-quick-gateway-model">
<Label htmlFor="coach-quick-gateway-model" noColon>
{t("settings.ai.modelLabel")}
</Label>
<div className="flex items-center gap-2">
@@ -4,6 +4,7 @@ import { useState } from "react";
import { Eye, Loader2, Target } from "lucide-react";
import { toast } from "sonner";
import { Label } from "@/components/ui/label";
import { Switch } from "@/components/ui/switch";
import {
Select,
@@ -162,12 +163,9 @@ export function SourcesRail({ className, activeScopeLabel }: SourcesRailProps) {
under the picker states what the Coach reads at this setting, with
the numbers the server readers use. */}
<div data-slot="coach-sources-window" className="flex flex-col gap-1">
<label
htmlFor="coach-sources-window-select"
className="text-muted-foreground text-xs font-medium tracking-wide uppercase"
>
<Label htmlFor="coach-sources-window-select" noColon>
{t("insights.coach.lookback.label")}
</label>
</Label>
<Select
value={activeWindow}
onValueChange={(v) => setWindow(v as CoachDefaultWindow)}
@@ -177,7 +175,7 @@ export function SourcesRail({ className, activeScopeLabel }: SourcesRailProps) {
id="coach-sources-window-select"
data-slot="coach-sources-window-trigger"
size="default"
className="h-9 text-sm"
className="w-full text-sm"
aria-describedby="coach-sources-window-detail"
>
<SelectValue />
@@ -16,15 +16,20 @@ export function ReasoningEffortField({
id,
value,
onChange,
noColon = false,
}: {
id: string;
value: ReasoningEffort | null;
onChange: (next: ReasoningEffort | null) => void;
/** The Coach's quick settings label their fields without a colon. */
noColon?: boolean;
}) {
const { t } = useTranslations();
return (
<div>
<Label htmlFor={id}>{t("settings.ai.reasoning.label")}</Label>
<Label htmlFor={id} noColon={noColon}>
{t("settings.ai.reasoning.label")}
</Label>
<NativeSelect
id={id}
value={value ?? ""}