From 0ef25a80376d8e1339360b3efd371ea226c98231 Mon Sep 17 00:00:00 2001 From: npeter83 Date: Sat, 19 Sep 2026 17:53:22 +0200 Subject: [PATCH] feat(ui): the six native selects become the house controls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Owner's pick from the S7 mockups (2026-09-19): a short fixed set is a SegmentedToggle — the live search's result count, the table's rows per page, a download profile's mode (on its own row, so the three worded choices fit a phone) and audio format — and a longer set or the user's own list is a FilterSelect: the profile's quality (seven heights) and the download dialog's profile. A lint rule refuses a native : use ui/SegmentedToggle for a short fixed set, ui/FilterSelect for a longer one or a user's own list.", + }, + { + selector: "Literal[value=/text-\\[[\\d.]+px\\]/]", message: "px-frozen font size doesn't scale with --font-scale: use text-2xs/text-3xs or text-[Nrem], not text-[Npx] (R10 S2).", }, { - selector: "TemplateElement[value.raw=/text-\\[\\d+px\\]/]", + selector: "TemplateElement[value.raw=/text-\\[[\\d.]+px\\]/]", message: "px-frozen font size doesn't scale with --font-scale: use text-2xs/text-3xs or text-[Nrem], not text-[Npx] (R10 S2).", }, diff --git a/frontend/src/components/DownloadDialog.tsx b/frontend/src/components/DownloadDialog.tsx index dac5c792..d7a409e7 100644 --- a/frontend/src/components/DownloadDialog.tsx +++ b/frontend/src/components/DownloadDialog.tsx @@ -13,6 +13,7 @@ import { notify } from "../lib/notifications"; import { notifyActionError } from "../lib/actionErrors"; import { navigateTo } from "../lib/nav"; import { inputCls } from "./ui/form"; +import FilterSelect from "./ui/FilterSelect"; // Preset picker shown when the user hits Download on a card / in the player, or adds a URL from // the Download Center. Enqueues via the API and points the user at the Download Center. @@ -65,18 +66,17 @@ export default function DownloadDialog({ {title &&

{title}

} - - + + {/* The user's own list, of any length: a menu, not a segmented bar (owner's pick, 2026-09-19). */} + v && setProfileId(Number(v))} + options={profiles.map((p) => ({ value: String(p.id), label: p.name }))} + />