mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-10 05:12:14 +00:00
fix(ui): lift muted meta text off the sub-xs floor
Bump text-[10px]/text-[11px] to text-xs on muted description, hint, and status-label surfaces that had drifted below the type-scale floor — coach conversation captions, settings/admin status badges, mood confidence pills, side-effect and cycle meta lines. Tabular-nums badges, chart-plot legend/axis chrome, ring geometry, and width-constrained tag tiles keep their compact size by design.
This commit is contained in:
1 parent
b6a1fc1c2b
commit
e1c6941b20
23 files changed
+38
-40
No files matched your search
@@ -328,13 +328,13 @@ export function ApiTokenOverviewSection() {
|
||||
</Badge>
|
||||
))}
|
||||
</div>
|
||||
<p className="text-muted-foreground mt-2 text-[11px]">
|
||||
<p className="text-muted-foreground mt-2 text-xs">
|
||||
{t("admin.tokenLastUsed")}:{" "}
|
||||
{token.lastUsedAt
|
||||
? formatDateTime(token.lastUsedAt)
|
||||
: t("admin.tokenNeverUsed")}
|
||||
</p>
|
||||
<p className="text-muted-foreground text-[11px]">
|
||||
<p className="text-muted-foreground text-xs">
|
||||
{t("admin.tokenCreated")}: {formatDate(token.createdAt)}
|
||||
</p>
|
||||
</li>
|
||||
|
||||
@@ -578,11 +578,11 @@ export function BackupsSection() {
|
||||
<li>
|
||||
<div className="flex items-center gap-2">
|
||||
<span className="truncate font-medium">{row.username}</span>
|
||||
<Badge variant="secondary" className="text-[10px]">
|
||||
<Badge variant="secondary" className="text-xs">
|
||||
{formatBackupType(row.type, t)}
|
||||
</Badge>
|
||||
</div>
|
||||
<p className="text-muted-foreground text-[11px]">
|
||||
<p className="text-muted-foreground text-xs">
|
||||
{t("admin.section.backups.colSize")}:{" "}
|
||||
{formatBytes(row.sizeBytes, fmt)} ·{" "}
|
||||
{fmt.dateTime(row.createdAt)}
|
||||
|
||||
@@ -411,7 +411,7 @@ export function UserManagementSection() {
|
||||
variant={
|
||||
u.role === "ADMIN" ? "default" : "secondary"
|
||||
}
|
||||
className="text-[10px]"
|
||||
className="text-xs"
|
||||
>
|
||||
{u.role}
|
||||
</Badge>
|
||||
@@ -419,7 +419,7 @@ export function UserManagementSection() {
|
||||
<p className="text-muted-foreground truncate text-xs">
|
||||
{u.email || "—"}
|
||||
</p>
|
||||
<p className="text-muted-foreground text-[11px]">
|
||||
<p className="text-muted-foreground text-xs">
|
||||
{t("admin.userPasskeys")}: {u.passkeyCount} ·{" "}
|
||||
{formatDate(u.createdAt)}
|
||||
</p>
|
||||
|
||||
@@ -248,7 +248,7 @@ export function ChartOverlayControlsBody({
|
||||
prefs.comparisonBaseline === value ? "default" : "outline"
|
||||
}
|
||||
size="sm"
|
||||
className={`min-h-11 px-2 text-[11px] sm:min-h-9 ${isGreyed ? "opacity-50" : ""}`.trim()}
|
||||
className={`min-h-11 px-2 text-xs sm:min-h-9 ${isGreyed ? "opacity-50" : ""}`.trim()}
|
||||
onClick={() => setComparisonBaseline(value)}
|
||||
aria-pressed={prefs.comparisonBaseline === value}
|
||||
aria-disabled={isGreyed || undefined}
|
||||
@@ -263,7 +263,7 @@ export function ChartOverlayControlsBody({
|
||||
</div>
|
||||
{comparisonGreyOut && (
|
||||
<p
|
||||
className="text-muted-foreground text-[10px] leading-snug"
|
||||
className="text-muted-foreground text-xs leading-snug"
|
||||
data-slot="chart-overlay-comparison-unavailable-hint"
|
||||
>
|
||||
{disabledTooltip}
|
||||
|
||||
@@ -360,7 +360,7 @@ function StatChip({
|
||||
style={{ backgroundColor: hue }}
|
||||
/>
|
||||
<span className="flex flex-col">
|
||||
<span className="text-muted-foreground text-[11px] leading-tight">
|
||||
<span className="text-muted-foreground text-xs leading-tight">
|
||||
{label}
|
||||
</span>
|
||||
<span className="text-foreground text-sm font-semibold tabular-nums">
|
||||
|
||||
@@ -187,7 +187,7 @@ export function CyclePhaseCrosstab({
|
||||
</span>
|
||||
<span
|
||||
className={cn(
|
||||
"shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium",
|
||||
"shrink-0 rounded-full px-2 py-0.5 text-xs font-medium",
|
||||
CONFIDENCE_CLASS[row.confidence],
|
||||
)}
|
||||
>
|
||||
|
||||
@@ -1040,11 +1040,11 @@ export function CoachConversation({
|
||||
<span className="truncate">{docScopeText}</span>
|
||||
</span>
|
||||
</div>
|
||||
<p className="text-muted-foreground text-[11px] leading-snug">
|
||||
<p className="text-muted-foreground text-xs leading-snug">
|
||||
{t("insights.coach.attach.fencedHint")}
|
||||
</p>
|
||||
{anyPendingUnindexed ? (
|
||||
<p className="text-muted-foreground text-[11px] leading-snug">
|
||||
<p className="text-muted-foreground text-xs leading-snug">
|
||||
{t("insights.coach.attach.indexingHint")}
|
||||
</p>
|
||||
) : null}
|
||||
@@ -1143,9 +1143,7 @@ export function CoachConversation({
|
||||
{renderDescription ? (
|
||||
renderDescription(tagline)
|
||||
) : (
|
||||
<p className="text-muted-foreground truncate text-[11px]">
|
||||
{tagline}
|
||||
</p>
|
||||
<p className="text-muted-foreground truncate text-xs">{tagline}</p>
|
||||
)}
|
||||
</div>
|
||||
<Button
|
||||
|
||||
@@ -216,7 +216,7 @@ export function CoachDrawer({
|
||||
</SheetTitle>
|
||||
)}
|
||||
renderDescription={(tagline) => (
|
||||
<SheetDescription className="text-muted-foreground truncate text-[11px]">
|
||||
<SheetDescription className="text-muted-foreground truncate text-xs">
|
||||
{tagline}
|
||||
</SheetDescription>
|
||||
)}
|
||||
|
||||
@@ -133,7 +133,7 @@ export function GuidedQuestionBubble({
|
||||
<>
|
||||
<p
|
||||
data-slot="coach-guided-progress"
|
||||
className="text-primary mb-1 flex items-center gap-2 text-[10px] font-semibold tracking-wider uppercase"
|
||||
className="text-primary mb-1 flex items-center gap-2 text-xs font-semibold tracking-wider uppercase"
|
||||
>
|
||||
{t("insights.coach.guided.progress", {
|
||||
current: progress.current,
|
||||
|
||||
@@ -88,7 +88,7 @@ export function SourceChips({ provenance, className }: SourceChipsProps) {
|
||||
className={cn(
|
||||
"border-info/25 text-info/90",
|
||||
"inline-flex items-center gap-1 rounded-full border bg-transparent",
|
||||
"px-2 py-0.5 text-[11px] leading-none",
|
||||
"px-2 py-0.5 text-xs leading-none",
|
||||
)}
|
||||
>
|
||||
<Link2 className="h-2.5 w-2.5" aria-hidden="true" />
|
||||
|
||||
@@ -76,7 +76,7 @@ function DraftPill({ ariaLabel }: { ariaLabel: string }) {
|
||||
data-confidence-band="draft"
|
||||
role="img"
|
||||
aria-label={ariaLabel}
|
||||
className="bg-destructive/10 text-destructive border-destructive/25 inline-flex items-center rounded-full border px-2 py-0.5 text-[10px] font-medium tracking-wide uppercase"
|
||||
className="bg-destructive/10 text-destructive border-destructive/25 inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium tracking-wide uppercase"
|
||||
>
|
||||
{t("insights.recommendation.confidenceDraft")}
|
||||
</span>
|
||||
|
||||
@@ -147,7 +147,7 @@ export function MoodBetterDays({
|
||||
</span>
|
||||
<span
|
||||
className={cn(
|
||||
"shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium",
|
||||
"shrink-0 rounded-full px-2 py-0.5 text-xs font-medium",
|
||||
CONFIDENCE_CLASS[factor.confidence],
|
||||
)}
|
||||
>
|
||||
|
||||
@@ -138,7 +138,7 @@ export function MoodFactorMetricCrosstab({
|
||||
</span>
|
||||
<span
|
||||
className={cn(
|
||||
"shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium",
|
||||
"shrink-0 rounded-full px-2 py-0.5 text-xs font-medium",
|
||||
CONFIDENCE_CLASS[row.confidence],
|
||||
)}
|
||||
>
|
||||
|
||||
@@ -101,7 +101,7 @@ export function MoodTagInfluence({ rows }: { rows: MoodTagInfluenceRow[] }) {
|
||||
</span>
|
||||
<span
|
||||
className={cn(
|
||||
"shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium",
|
||||
"shrink-0 rounded-full px-2 py-0.5 text-xs font-medium",
|
||||
CONFIDENCE_CLASS[row.confidence],
|
||||
)}
|
||||
>
|
||||
|
||||
@@ -137,7 +137,7 @@ export function MoodTagMetricCrosstab({
|
||||
</span>
|
||||
<span
|
||||
className={cn(
|
||||
"shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium",
|
||||
"shrink-0 rounded-full px-2 py-0.5 text-xs font-medium",
|
||||
CONFIDENCE_CLASS[row.confidence],
|
||||
)}
|
||||
>
|
||||
|
||||
@@ -194,7 +194,7 @@ export function TrendAnnotation({
|
||||
<Badge
|
||||
data-slot="trend-annotation-confidence"
|
||||
variant="outline"
|
||||
className={cn("text-[10px]", CONFIDENCE_BADGE_CLASS[confidence])}
|
||||
className={cn("text-xs", CONFIDENCE_BADGE_CLASS[confidence])}
|
||||
>
|
||||
{t(CONFIDENCE_LABEL_KEY[confidence])}
|
||||
</Badge>
|
||||
|
||||
@@ -201,7 +201,7 @@ export function ScheduleHistoryTimeline({
|
||||
: t("medications.detail.zeitplan.history.noTimes")}
|
||||
{revision.source === "MANUAL" && (
|
||||
<span
|
||||
className="border-primary/30 bg-primary/10 text-primary ml-2 inline-flex rounded-full border px-2 py-px align-middle text-[11px] font-medium"
|
||||
className="border-primary/30 bg-primary/10 text-primary ml-2 inline-flex rounded-full border px-2 py-px align-middle text-xs font-medium"
|
||||
data-slot="zeitplan-history-manual-chip"
|
||||
>
|
||||
{t("medications.detail.zeitplan.history.manualChip")}
|
||||
|
||||
@@ -492,7 +492,7 @@ export function SideEffectsSection({ medicationId }: SideEffectsSectionProps) {
|
||||
<span aria-hidden className="block text-sm">
|
||||
{value}
|
||||
</span>
|
||||
<span className="block text-[10px] opacity-80">
|
||||
<span className="block text-xs opacity-80">
|
||||
{t(`medications.sideEffects.severity.${label}`)}
|
||||
</span>
|
||||
</button>
|
||||
@@ -517,7 +517,7 @@ export function SideEffectsSection({ medicationId }: SideEffectsSectionProps) {
|
||||
// px-3 py-2 is too tall inside the side-effect modal.
|
||||
className="px-2 py-1.5"
|
||||
/>
|
||||
<p className="text-muted-foreground text-right text-[10px]">
|
||||
<p className="text-muted-foreground text-right text-xs">
|
||||
{notes.length} / {NOTES_MAX}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1107,7 +1107,7 @@ function MoodNoteText({
|
||||
aria-expanded={expanded}
|
||||
aria-controls={noteId}
|
||||
data-testid="mood-note-toggle"
|
||||
className="text-primary cursor-pointer text-[11px] font-medium"
|
||||
className="text-primary cursor-pointer text-xs font-medium"
|
||||
>
|
||||
{expanded ? t("mood.noteCollapse") : t("mood.noteExpand")}
|
||||
</button>
|
||||
|
||||
@@ -323,7 +323,7 @@ function SourceCardItem({
|
||||
<div className="min-w-0 flex-1">
|
||||
<h2 className="text-base font-semibold tracking-tight">{titleLabel}</h2>
|
||||
{recommendedLabel ? (
|
||||
<span className="bg-primary/10 text-primary mt-1 inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium tracking-wide uppercase">
|
||||
<span className="bg-primary/10 text-primary mt-1 inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium tracking-wide uppercase">
|
||||
{recommendedLabel}
|
||||
</span>
|
||||
) : null}
|
||||
|
||||
@@ -119,7 +119,7 @@ function ApiEndpointsCard() {
|
||||
className="bg-muted/30 border-border space-y-1.5 rounded-lg border p-3 text-xs"
|
||||
>
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
<Badge variant="secondary" className="text-[10px]">
|
||||
<Badge variant="secondary" className="text-xs">
|
||||
{endpoint.method}
|
||||
</Badge>
|
||||
<code className="font-mono break-all">{endpoint.path}</code>
|
||||
@@ -457,11 +457,11 @@ function ApiTokensCard() {
|
||||
{tok.name}
|
||||
</p>
|
||||
{isExpired ? (
|
||||
<Badge variant="destructive" className="text-[10px]">
|
||||
<Badge variant="destructive" className="text-xs">
|
||||
{t("settings.tokenExpired")}
|
||||
</Badge>
|
||||
) : (
|
||||
<Badge className="bg-success/15 text-success text-[10px]">
|
||||
<Badge className="bg-success/15 text-success text-xs">
|
||||
{t("settings.tokenActive")}
|
||||
</Badge>
|
||||
)}
|
||||
|
||||
@@ -124,7 +124,7 @@ function McpConnectionsCard() {
|
||||
<p className="min-w-0 flex-1 text-sm font-medium break-all">
|
||||
{conn.clientName}
|
||||
</p>
|
||||
<Badge className="bg-success/15 text-success text-[10px]">
|
||||
<Badge className="bg-success/15 text-success text-xs">
|
||||
{t("settings.mcp.connectionConnected")}
|
||||
</Badge>
|
||||
</div>
|
||||
@@ -438,11 +438,11 @@ function McpTokensCard() {
|
||||
{tok.name}
|
||||
</p>
|
||||
{isExpired ? (
|
||||
<Badge variant="destructive" className="text-[10px]">
|
||||
<Badge variant="destructive" className="text-xs">
|
||||
{t("settings.tokenExpired")}
|
||||
</Badge>
|
||||
) : (
|
||||
<Badge className="bg-success/15 text-success text-[10px]">
|
||||
<Badge className="bg-success/15 text-success text-xs">
|
||||
{t("settings.tokenActive")}
|
||||
</Badge>
|
||||
)}
|
||||
|
||||
@@ -125,13 +125,13 @@ function ShareLinksCard() {
|
||||
{link.label}
|
||||
</p>
|
||||
<div className="flex flex-wrap items-center gap-1.5">
|
||||
<Badge className="bg-success/15 text-success text-[10px]">
|
||||
<Badge className="bg-success/15 text-success text-xs">
|
||||
{t("settings.sharing.statusActive")}
|
||||
</Badge>
|
||||
{link.protected && (
|
||||
<Badge
|
||||
variant="outline"
|
||||
className="gap-1 text-[10px]"
|
||||
className="gap-1 text-xs"
|
||||
data-testid="share-protected-badge"
|
||||
>
|
||||
<KeyRound className="h-2.5 w-2.5" />
|
||||
@@ -141,7 +141,7 @@ function ShareLinksCard() {
|
||||
{link.documentCount > 0 && (
|
||||
<Badge
|
||||
variant="outline"
|
||||
className="gap-1 text-[10px]"
|
||||
className="gap-1 text-xs"
|
||||
data-testid="share-doc-count-badge"
|
||||
aria-label={t("settings.sharing.documentCount", {
|
||||
count: link.documentCount,
|
||||
@@ -152,7 +152,7 @@ function ShareLinksCard() {
|
||||
</Badge>
|
||||
)}
|
||||
{link.allowFhirApi && (
|
||||
<Badge variant="outline" className="text-[10px]">
|
||||
<Badge variant="outline" className="text-xs">
|
||||
FHIR
|
||||
</Badge>
|
||||
)}
|
||||
@@ -240,7 +240,7 @@ function ShareLinksCard() {
|
||||
<p className="min-w-0 flex-1 text-sm font-medium break-words">
|
||||
{link.label}
|
||||
</p>
|
||||
<Badge variant="secondary" className="text-[10px]">
|
||||
<Badge variant="secondary" className="text-xs">
|
||||
{link.revokedAt
|
||||
? t("settings.sharing.statusRevoked")
|
||||
: t("settings.sharing.statusExpired")}
|
||||
|
||||
Reference in new issue
Block a user