fix(ui): E31 S2 — the tab names the object, the channel header wraps, the player fits a short window
- The browser tab names the place and the object: PageHeading reports the view's own title (lib/documentTitle), so a channel, playlist or any Plex view reads "<object> · <module> · Siftlode" however it was opened; the Feed is named too; a season adds its show (tabTitle). - The channel page's tab + action row wraps and lets the tag lane fold into "+N": at 1024 it ran past the edge and the page scrolled sideways. - The YouTube player card's width is capped from the window height less the chrome measured under the video: at 133% zoom (685px) it cut its channel row. - Plex certificate words (Not Rated, Approved, Passed) are named through the vocabulary on the info badge, show page, collection, filter and chips. - DESIGN.md: the zoom target is 125% and 133%, not 200% (decision log).
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import type { ComponentPropsWithoutRef, ReactNode } from "react";
|
||||
import { type ComponentPropsWithoutRef, type ReactNode, useRef } from "react";
|
||||
import { useNameTabAfter } from "../../lib/documentTitle";
|
||||
import { useOwnPageHeading } from "./pageHeading";
|
||||
|
||||
// The page's heading outline (B4, UX-15): one `h1` per page, then a heading per section. A screen
|
||||
@@ -6,10 +7,16 @@ import { useOwnPageHeading } from "./pageHeading";
|
||||
// structure from exactly the people who navigate by it.
|
||||
|
||||
/** A view's own visible title (a channel, a Plex show, a playlist): the page's `h1`, in place of the
|
||||
* shell's hidden page name. */
|
||||
export function PageHeading(props: ComponentPropsWithoutRef<"h1">) {
|
||||
* shell's hidden page name, and the object the browser tab names (`lib/documentTitle`). `tabTitle`
|
||||
* only when the heading alone does not say what it is (a season: "Season 1" → "Voyager · Season 1"). */
|
||||
export function PageHeading({
|
||||
tabTitle,
|
||||
...props
|
||||
}: ComponentPropsWithoutRef<"h1"> & { tabTitle?: string }) {
|
||||
useOwnPageHeading();
|
||||
return <h1 {...props} />;
|
||||
const ref = useRef<HTMLHeadingElement>(null);
|
||||
useNameTabAfter(ref, tabTitle);
|
||||
return <h1 ref={ref} {...props} />;
|
||||
}
|
||||
|
||||
/** A section's caption: the small uppercase muted label, as a heading. `level` 3 inside a dialog or
|
||||
|
||||
Reference in New Issue
Block a user