diff --git a/src/components/insights/mood/mood-better-days.tsx b/src/components/insights/mood/mood-better-days.tsx index 07b507214..55738c513 100644 --- a/src/components/insights/mood/mood-better-days.tsx +++ b/src/components/insights/mood/mood-better-days.tsx @@ -2,7 +2,7 @@ import { ArrowDownRight, ArrowUpRight } from "lucide-react"; -import { useTranslations } from "@/lib/i18n/context"; +import { useFormatters, useTranslations } from "@/lib/i18n/context"; import { moodTagIcon } from "@/components/mood/mood-tag-icons"; import { cn } from "@/lib/utils"; import type { MoodInfluenceConfidence } from "./mood-tag-influence"; @@ -70,6 +70,7 @@ export function MoodBetterDays({ factors: MoodBetterDayFactor[]; }) { const { t } = useTranslations(); + const nf = useFormatters(); if (factors.length === 0) return null; return ( @@ -108,9 +109,9 @@ export function MoodBetterDays({ // metric factors show the correlation coefficient. const effectText = factor.source === "tag" && factor.delta != null - ? `${factor.delta >= 0 ? "+" : ""}${factor.delta.toFixed(1)}` + ? `${factor.delta >= 0 ? "+" : ""}${nf.number(factor.delta, 1)}` : factor.r != null - ? `r ${factor.r.toFixed(2)}` + ? `r ${nf.number(factor.r, 2)}` : ""; return ( diff --git a/src/components/insights/mood/mood-context-comparison.tsx b/src/components/insights/mood/mood-context-comparison.tsx index 3df6ff9ba..4bcf8a63e 100644 --- a/src/components/insights/mood/mood-context-comparison.tsx +++ b/src/components/insights/mood/mood-context-comparison.tsx @@ -16,7 +16,7 @@ * them; a second threshold in the presentation layer would be a second place * to get the statistics wrong. */ -import { useTranslations } from "@/lib/i18n/context"; +import { useFormatters, useTranslations } from "@/lib/i18n/context"; import { contextValueLabelKey } from "@/lib/mood/context-vocabulary"; import type { ContextComparisonRow } from "@/lib/insights/mood-context-crosstab"; @@ -26,6 +26,7 @@ export function MoodContextComparison({ rows: ContextComparisonRow[]; }) { const { t } = useTranslations(); + const nf = useFormatters(); if (rows.length === 0) return null; return ( @@ -50,8 +51,8 @@ export function MoodContextComparison({ {t("insights.mood.contextComparison.statement", { label, direction, - withAvg: row.withAvg.toFixed(1), - withoutAvg: row.withoutAvg.toFixed(1), + withAvg: nf.number(row.withAvg, 1), + withoutAvg: nf.number(row.withoutAvg, 1), })}
{/* The counts ride with the statement, in the same block a diff --git a/src/components/insights/mood/mood-correlation-cards.tsx b/src/components/insights/mood/mood-correlation-cards.tsx index 804bf52ff..36c07db54 100644 --- a/src/components/insights/mood/mood-correlation-cards.tsx +++ b/src/components/insights/mood/mood-correlation-cards.tsx @@ -8,7 +8,7 @@ import { Card, CardContent, CardHeader } from "@/components/ui/card"; import { TileHeader } from "@/components/insights/tile-header"; import { EmptyState } from "@/components/ui/empty-state"; import { Skeleton } from "@/components/ui/skeleton"; -import { useTranslations } from "@/lib/i18n/context"; +import { useFormatters, useTranslations } from "@/lib/i18n/context"; import type { CorrelationResult } from "@/lib/analytics/correlations"; import { MoodExplainerIcon } from "./mood-explainer-icon"; @@ -106,6 +106,7 @@ function MoodCorrelationCard({ className?: string; }) { const { t } = useTranslations(); + const nf = useFormatters(); const hasResult = data.result != null; // Three different silences, and the reader deserves to know which one they @@ -164,7 +165,7 @@ function MoodCorrelationCard({ label={t("insights.mood.correlation.sourceLabel")} detail={t("insights.mood.correlation.source", { n: data.n, - r: data.result.r.toFixed(2), + r: nf.number(data.result.r, 2), })} /> @@ -179,7 +180,7 @@ function MoodCorrelationCard({ label={t("insights.mood.correlation.sourceLabel")} detail={t("insights.mood.correlation.source", { n: data.n, - r: data.result.r.toFixed(2), + r: nf.number(data.result.r, 2), })} /> ) : null} diff --git a/src/components/insights/mood/mood-discovered-relations.tsx b/src/components/insights/mood/mood-discovered-relations.tsx index 53bca5e81..4a9adf235 100644 --- a/src/components/insights/mood/mood-discovered-relations.tsx +++ b/src/components/insights/mood/mood-discovered-relations.tsx @@ -1,6 +1,6 @@ "use client"; -import { useTranslations } from "@/lib/i18n/context"; +import { useFormatters, useTranslations } from "@/lib/i18n/context"; import { MoodExplainerIcon } from "./mood-explainer-icon"; import { PatternDismissButton, @@ -94,6 +94,7 @@ export function MoodDiscoveredRelations({ pairsTested: number; }) { const { t } = useTranslations(); + const nf = useFormatters(); const dismissal = usePatternDismissalOverrides(); if (pairs.length === 0) return null; @@ -169,8 +170,8 @@ export function MoodDiscoveredRelations({ label={t("insights.mood.discovery.statLabel")} detail={t("insights.mood.discovery.stat", { n: pair.n, - r: pair.r.toFixed(2), - q: pair.qValue.toFixed(3), + r: nf.number(pair.r, 2), + q: nf.number(pair.qValue, 3), })} /> diff --git a/src/components/insights/mood/mood-factor-metric-crosstab.tsx b/src/components/insights/mood/mood-factor-metric-crosstab.tsx index 65d1b5a4e..6cd598af6 100644 --- a/src/components/insights/mood/mood-factor-metric-crosstab.tsx +++ b/src/components/insights/mood/mood-factor-metric-crosstab.tsx @@ -1,6 +1,7 @@ "use client"; -import { useTranslations } from "@/lib/i18n/context"; +import { useFormatters, useTranslations } from "@/lib/i18n/context"; +import type { Formatters } from "@/lib/format-locale"; import { useUnitDisplay } from "@/hooks/use-unit-display"; import { moodTagIcon } from "@/components/mood/mood-tag-icons"; import { cn } from "@/lib/utils"; @@ -84,8 +85,12 @@ const CONFIDENCE_CLASS: Record{t("insights.mood.influence.detail", { - withAvg: row.withAvg.toFixed(1), - withoutAvg: row.withoutAvg.toFixed(1), + withAvg: nf.number(row.withAvg, 1), + withoutAvg: nf.number(row.withoutAvg, 1), withDays: row.withDays, })}
diff --git a/src/components/insights/mood/mood-tag-metric-crosstab.tsx b/src/components/insights/mood/mood-tag-metric-crosstab.tsx index 9263fbaee..60d926a38 100644 --- a/src/components/insights/mood/mood-tag-metric-crosstab.tsx +++ b/src/components/insights/mood/mood-tag-metric-crosstab.tsx @@ -1,6 +1,7 @@ "use client"; -import { useTranslations } from "@/lib/i18n/context"; +import { useFormatters, useTranslations } from "@/lib/i18n/context"; +import type { Formatters } from "@/lib/format-locale"; import { moodTagIcon } from "@/components/mood/mood-tag-icons"; import { cn } from "@/lib/utils"; import type { MoodInfluenceConfidence } from "./mood-tag-influence"; @@ -92,8 +93,12 @@ const CONFIDENCE_CLASS: Record