wrolpi/app/src/components
Roland e46a44d253
ui: cards get legible titles, contained posters, and meta beside the title
Four defects on /videos, /docs and /archives.

Titles were invisible outside light.  `.card-link` carried a literal
`color: black` from before the themes existed -- about 1.1:1 on the dark,
night and amber panels.  It applies to every card title and to the
channel/author/domain line beside it.  The date was fine, since it takes
`--muted` from the card body, which is what made this look like a card
bug rather than a link bug.  Titles now take `--text`: they are links,
but they are the card's text, not a wall of blue.

Posters were cropped, not mis-proportioned.  The image carried a fixed
290x163 box; a card in the default grid is about 233px wide and Mantine's
Card sets `overflow: hidden`, so the browser painted the middle 233px of
a 290px image.  The ratio was right in the layout tree and wrong on
screen.  Replaced with caps on both axes -- the card's width and
`--card-poster-max-height: 200px` -- with `width`/`height` left `auto` so
the pair behaves as "contain".  Bounding the width alone was tried first
and is not enough: a square thumbnail then stands as tall as the card is
wide, and a portrait book cover taller still.

The meta line was foot-anchored, so on /docs a PDF with no author had its
date shoved up to 55px below the title, at the bottom of a card that was
tall only because of its neighbour in the row.  It now sits directly
under the title.

Archive cards read buttons-then-domain, because the buttons were children
and the meta was what got pushed to the foot.  Card gains an `actions`
slot, rendered last and anchored to the foot, so a row lines its buttons
up however many lines each title took.

Gallery gains a poster row covering all five ratios and a row showing
meta/actions against unequal titles.

1076 jest tests, 145 in ui-layout.cy.js, clean build.  Every new guard was
checked against a planted regression: dropping the height cap reddens the
square and portrait cases and leaves 16:9 green; `width: 100%` reddens
containment; restoring `color: black` reddens dark/night/amber and leaves
light green; re-anchoring the meta and swapping the slot order redden both
the jest order test and the cypress geometry tests.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 18:37:49 -06:00
..
admin test: act on review — the browser test named LoadStatistic but never mounted it 2026-08-05 18:37:31 -06:00
calculators ui: thirty-five files off Semantic, leaving fifteen 2026-08-05 18:34:58 -06:00
collections build: uninstall Semantic UI 2026-08-05 18:36:31 -06:00
inventory ui: route genuine success and failure through the roles 2026-08-05 18:37:30 -06:00
ui ui: cards get legible titles, contained posters, and meta beside the title 2026-08-05 18:37:49 -06:00
AddToPlaylist.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
Apps.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
Archive.js ui: cards get legible titles, contained posters, and meta beside the title 2026-08-05 18:37:49 -06:00
ArchivePreview.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
BulkTagModal.js ui: migrate Downloads, Upload, and BulkTagModal off Semantic 2026-08-05 18:35:32 -06:00
BulkTagModal.test.js ui: migrate Downloads, Upload, and BulkTagModal off Semantic 2026-08-05 18:35:32 -06:00
Calculators.js ui: fix the cypress failures, and two real defects behind them 2026-08-05 18:35:07 -06:00
CbzViewer.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
Channels.cy.js Moving form fields. 2025-12-06 15:11:37 -07:00
Channels.js ui: Channels.js and Playlists.js off Semantic 2026-08-05 18:35:10 -06:00
Common.js ui: cards get legible titles, contained posters, and meta beside the title 2026-08-05 18:37:49 -06:00
Common.test.js test: act on review — and one of the seven turned out to be undemonstrable 2026-08-05 18:37:34 -06:00
DatesSelector.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-05 18:34:58 -06:00
DesktopToggle.test.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
Docs.js ui: migrate Docs.js and Zim.js off Semantic UI React 2026-08-05 18:35:27 -06:00
DomainEditPage.test.js app: handle form fetch failures without unhandled rejection 2026-07-16 19:40:28 -06:00
DomainsPage.test.js Reformatting code. 2025-12-06 15:11:37 -07:00
DomainTagging.test.js test: one place for fixtures, real providers instead of mocked context modules 2026-08-05 18:36:48 -06:00
DonatePage.js ui: nine leaf files off Semantic, and the components they needed 2026-08-05 18:34:49 -06:00
Download.cy.js build: uninstall Semantic UI 2026-08-05 18:36:31 -06:00
Download.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-05 18:34:58 -06:00
Download.test.js Reformatting code. 2025-12-06 15:11:37 -07:00
ErrorBoundary.js ui: nine leaf files off Semantic, and the components they needed 2026-08-05 18:34:49 -06:00
FileBrowser.js test: act on review — the skeleton guard was reading the wrong layer 2026-08-05 18:37:24 -06:00
FileBrowser.test.js test: the theme drives the colour scheme, and mockModule takes the module 2026-08-05 18:36:53 -06:00
FilePreview.js ui: FileBrowser.js and FilePreview.js off Semantic 2026-08-05 18:35:36 -06:00
FilePreview.test.js File preview: Open in Slicer button for STL/3MF files. 2026-07-05 13:31:40 -06:00
Files.js ui: route genuine success and failure through the roles 2026-08-05 18:37:30 -06:00
Flasher.js ui: route genuine success and failure through the roles 2026-08-05 18:37:30 -06:00
Flasher.test.js ui: migrate Flasher.js off Semantic UI React 2026-08-05 18:35:45 -06:00
Headline.js ui: nine leaf files off Semantic, and the components they needed 2026-08-05 18:34:49 -06:00
HelpModal.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-05 18:34:58 -06:00
KeyboardShortcutsProvider.js ui: fix the cypress failures, and two real defects behind them 2026-08-05 18:35:07 -06:00
Map.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-05 18:34:58 -06:00
MapSearchView.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-05 18:34:58 -06:00
MapViewer.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-05 18:34:58 -06:00
Nav.js ui: test the last four components, and put the last four in the gallery 2026-08-05 18:37:23 -06:00
otp.js Move One-Time Pad encryption to the browser (#479) 2026-06-13 13:52:34 -06:00
otp.test.js Move One-Time Pad encryption to the browser (#479) 2026-06-13 13:52:34 -06:00
Placeholder.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
Playlists.js ui: Channels.js and Playlists.js off Semantic 2026-08-05 18:35:10 -06:00
Playlists.test.js Add ordered collections (playlists): polymorphic items + item API (#475) 2026-06-11 19:46:34 -06:00
Search.js ui: fix the cypress failures, and two real defects behind them 2026-08-05 18:35:07 -06:00
SearchFilterModal.test.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-05 18:34:58 -06:00
Share.js ui: nine leaf files off Semantic, and the components they needed 2026-08-05 18:34:49 -06:00
ShortcutHint.js Displaying cmd+k/ctrl+k global search keyboard shortcut suggestion. 2026-02-23 16:07:22 -07:00
SortableTable.js ui: nine leaf files off Semantic, and the components they needed 2026-08-05 18:34:49 -06:00
Tables.js ui: nine leaf files off Semantic, and the components they needed 2026-08-05 18:34:49 -06:00
TaggedDeleteConfirmModal.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
TaggedDeleteConfirmModal.test.js Models like Archive/Video/Doc can be deleted, even if they are tagged. User is shown a warning and must confirm deletion of tagged files. 2026-05-03 19:14:15 -06:00
Theme.tsx ui: toasts move to the top right, get readable titles, and get tests 2026-08-05 18:37:19 -06:00
ThemeProvider.test.js test: act on review — observe the wiring, and stop the soft assertions 2026-08-05 18:37:22 -06:00
ThemeSamplePage.js ui: cards get legible titles, contained posters, and meta beside the title 2026-08-05 18:37:49 -06:00
Upload.js ui: migrate Downloads, Upload, and BulkTagModal off Semantic 2026-08-05 18:35:32 -06:00
Vars.js Restore "Most Views" download order 2026-07-07 16:34:50 -06:00
VideoPlayer.js ui: migrate VideoPlayer.js off Semantic UI React 2026-08-05 18:35:17 -06:00
VideoPlayer.test.js videos: address review — tighten auto-caption detection 2026-07-16 18:29:18 -06:00
Videos.js ui: route genuine success and failure through the roles 2026-08-05 18:37:30 -06:00
VncToggle.test.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
Zim.js ui: migrate Docs.js and Zim.js off Semantic UI React 2026-08-05 18:35:27 -06:00