release: 0.66.0 — E5 Plex epic (scoped search, HU localization, toolbar/header)

Ships the E5 sprint stack (S1–S7): field-scoped Plex search + typeahead, cast &
crew pages, the HU-overlay Hungarian metadata + language-aware serving, the
IMDb/audience rating split, the toolbar relocation, and the narrow/mobile header
fix — plus the underlying Plex-module refactors (feedquery/plex.cards/plex.query
extraction, db.query→2.0 select).

- VERSION 0.65.2 → 0.66.0
- releaseNotes.ts: 0.66.0 user-facing entry
- prettier-format the E5-touched frontend files (release hygiene)

Merged main (0.65.2 download-gc hotfix) in first; no code conflicts (E5 is
Plex-only, the hotfix was notifications/downloads).
This commit is contained in:
2026-08-17 22:18:07 +02:00
parent cee0bc95b6
commit b605c28b32
8 changed files with 42 additions and 28 deletions
+3 -10
View File
@@ -8,11 +8,7 @@ import { usePlex, usePlexActions } from "./PlexProvider";
import { api } from "../lib/api";
import { qk } from "../lib/queryKeys";
import { useDebounced } from "../lib/useDebounced";
import {
availablePlexFields,
healPlexField,
plexFieldLabelKey,
} from "../lib/plexSearch";
import { availablePlexFields, healPlexField, plexFieldLabelKey } from "../lib/plexSearch";
// The Plex header search box: the shared SearchBar enriched with the S2 search scope-pill (a
// GitHub-style field selector inside the box) and an instant typeahead of the top matches attached
@@ -46,8 +42,7 @@ export default function PlexSearchBox() {
const suggestQ = useQuery({
queryKey: qk.plexSuggest(scope, dq, activeField),
enabled: suggestEnabled,
queryFn: () =>
api.plexLibrary({ scope, q: dq, field: activeField, limit: SUGGEST_LIMIT }),
queryFn: () => api.plexLibrary({ scope, q: dq, field: activeField, limit: SUGGEST_LIMIT }),
staleTime: 30_000,
});
const suggestions = suggestEnabled ? (suggestQ.data?.items ?? []) : [];
@@ -58,9 +53,7 @@ export default function PlexSearchBox() {
// Keep the highlighted option scrolled into view during arrow-key navigation.
useEffect(() => {
if (hi < 0) return;
listRef.current
?.querySelector(`[data-idx="${hi}"]`)
?.scrollIntoView({ block: "nearest" });
listRef.current?.querySelector(`[data-idx="${hi}"]`)?.scrollIntoView({ block: "nearest" });
}, [hi]);
const pick = (i: number) => {