From 824a0f4403801f75ed1335ba25969735788f8098 Mon Sep 17 00:00:00 2001 From: maria-rcks Date: Sun, 4 Oct 2026 12:51:05 +0000 Subject: [PATCH] perf(web): validate monospace fonts when selected --- .../src/components/settings/FontFamilyPicker.tsx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/web/src/components/settings/FontFamilyPicker.tsx b/apps/web/src/components/settings/FontFamilyPicker.tsx index b7e43eef8209..086de86e3aa9 100644 --- a/apps/web/src/components/settings/FontFamilyPicker.tsx +++ b/apps/web/src/components/settings/FontFamilyPicker.tsx @@ -12,6 +12,7 @@ import { ComboboxTrigger, } from "../ui/combobox"; import { SelectButton } from "../ui/select"; +import { stackedThreadToast, toastManager } from "../ui/toast"; const DEFAULT_FONT_VALUE = "__default__"; @@ -141,8 +142,8 @@ export function FontFamilyPicker({ const families = useMemo(() => { if (enumeration.status !== "granted") return []; - return requireMonospace ? enumeration.families.filter(isMonospaceFamily) : enumeration.families; - }, [enumeration, requireMonospace]); + return enumeration.families; + }, [enumeration]); const items = useMemo(() => { const trimmedQuery = query.trim().toLowerCase(); @@ -160,6 +161,16 @@ export function FontFamilyPicker({ const handlePick = (value: string) => { setOpen(false); + if (value !== DEFAULT_FONT_VALUE && requireMonospace && !isMonospaceFamily(value)) { + toastManager.add( + stackedThreadToast({ + type: "error", + title: `"${value}" isn't monospace`, + description: "Code and terminal need a fixed-width font, so the current font was kept.", + }), + ); + return; + } onSelect(value === DEFAULT_FONT_VALUE ? "" : value); };