theme overlay keeps its size across the favourites filter, f flips the filter
This commit is contained in:
@@ -199,7 +199,7 @@ export const ThemeSwitcher = () => {
|
||||
onClick={(ev) => ev.stopPropagation()}
|
||||
>
|
||||
{/* The filter, mirrored from the dropdown — same state, so the two surfaces never disagree
|
||||
about what "the list" currently is. `tab` does the same thing from the keyboard. */}
|
||||
about what "the list" currently is. `f` does the same thing from the keyboard. */}
|
||||
<div className="mb-2 text-center">
|
||||
<button
|
||||
type="button"
|
||||
@@ -217,7 +217,11 @@ export const ThemeSwitcher = () => {
|
||||
{overlayList.length === 0 && (
|
||||
<p className="px-2 py-6 text-center text-xs opacity-60">{t('theme.noFavourites')}</p>
|
||||
)}
|
||||
<ul className="flex max-h-[70vh] flex-col gap-1 overflow-y-auto">
|
||||
{/* FIXED dimensions, not max/content: flipping the favourites filter must not resize the
|
||||
panel — the list is 200+ themes on one side of the flip and a handful on the other, and
|
||||
a modal that jumps between two sizes on every `f` reads as broken. Long names truncate;
|
||||
they already did when the widest name happened to be filtered out. */}
|
||||
<ul className="flex h-[70vh] w-[26rem] max-w-[80vw] flex-col gap-1 overflow-y-auto">
|
||||
{overlayList.map((entry) => {
|
||||
const isFocused = entry.id === focused;
|
||||
return (
|
||||
@@ -250,9 +254,7 @@ export const ThemeSwitcher = () => {
|
||||
? t('theme.unstarNamed', { name: entry.name })
|
||||
: t('theme.starNamed', { name: entry.name })
|
||||
}
|
||||
title={
|
||||
isFavorite(entry.id) ? t('theme.removeFromFavouritesKey') : t('theme.addToFavouritesKey')
|
||||
}
|
||||
title={isFavorite(entry.id) ? t('theme.removeFromFavourites') : t('theme.addToFavourites')}
|
||||
onClick={(ev) => {
|
||||
// Or the row's own onClick applies the theme and closes the overlay, which is
|
||||
// the opposite of what starring is for.
|
||||
|
||||
Reference in New Issue
Block a user