wrolpi/app/src/components
Roland 79a7a475fb
ui: name the directory fields, announce their help text, let long prefixes shrink
Greptile's three findings on #590, all confirmed real before fixing, and each one
verified red against the original code afterwards.

P1, the directory fields had no accessible names.  All five rendered their
visible label as a bare <label> with no htmlFor while passing no label prop, so
their inputs had a description ("/media/wrolpi/") and no name at all -- five
fields in one grid, holding similar relative paths, indistinguishable to a
screen reader.  The labels now belong to the inputs, InfoPopup content and all.
This predates PathInput; the old TextInput call sites had the same gap, and
moving to a component that supports labels is what made it fixable.

P1, description and error were rendered but never referenced.  aria-describedby
pointed only at the prefix, so the help text listing the variables a path
accepts, and the reason a path was rejected, were both invisible to assistive
technology.  Both are now in the description, and an errored field reports
aria-invalid.

P2 was worse than reported: at `flex: none` a long prefix took the entire row
and left the input eighteen pixels wide -- not "consumes the editable area" but
a field nobody can type in.  The media directory is whatever the API reports, so
its length was never ours to assume.  The prefix now shrinks and ellipsises at
half the control, with the full path on `title` and in the accessible
description.

The naming fault could not have been caught where the others were.  jsdom cannot
see layout, and the Settings page needs enough mocking that it had no test at
all -- which is why these five fields were uncovered when they broke.  The new
e2e spec intercepts the API and lets the real page render, so it measures the
names and the geometry a user actually gets.  Reverting one field to a bare
label fails it; a long prefix fails the browser spec at 18px.

962 jest, 15 browser component, 46 e2e, clean cache-busted build, tsc clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 18:04:04 -06:00
..
admin ui: name the directory fields, announce their help text, let long prefixes shrink 2026-08-08 18:04:04 -06:00
calculators ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
collections build: uninstall Semantic UI 2026-08-08 18:04:03 -06:00
inventory ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
ui ui: name the directory fields, announce their help text, let long prefixes shrink 2026-08-08 18:04:04 -06:00
AddToPlaylist.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -06:00
Apps.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -06:00
Archive.js ui: bring back the card mimetype accent 2026-08-08 18:04:03 -06:00
ArchivePreview.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -06:00
BulkTagModal.js ui: migrate Downloads, Upload, and BulkTagModal off Semantic 2026-08-08 18:04:02 -06:00
BulkTagModal.test.js ui: migrate Downloads, Upload, and BulkTagModal off Semantic 2026-08-08 18:04:02 -06:00
Calculators.js ui: fix the cypress failures, and two real defects behind them 2026-08-08 18:04:01 -06:00
CbzViewer.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -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-08 18:04:01 -06:00
Common.js ui: the last Semantic UI file, and the stylesheet with it 2026-08-08 18:04:03 -06:00
Common.test.js ui: fix search suggestion selection, rendering, and clipping 2026-08-08 18:04:01 -06:00
DatesSelector.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
DesktopToggle.test.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -06:00
Docs.js ui: migrate Docs.js and Zim.js off Semantic UI React 2026-08-08 18:04:01 -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 Reformatting code. 2025-12-06 15:11:37 -07:00
DonatePage.js ui: nine leaf files off Semantic, and the components they needed 2026-08-08 18:04:00 -06:00
Download.cy.js build: uninstall Semantic UI 2026-08-08 18:04:03 -06:00
Download.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -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-08 18:04:00 -06:00
FileBrowser.js ui: FileBrowser.js and FilePreview.js off Semantic 2026-08-08 18:04:02 -06:00
FileBrowser.test.js ui: FileBrowser.js and FilePreview.js off Semantic 2026-08-08 18:04:02 -06:00
FilePreview.js ui: FileBrowser.js and FilePreview.js off Semantic 2026-08-08 18:04:02 -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: bring back the card mimetype accent 2026-08-08 18:04:03 -06:00
Flasher.js ui: migrate Flasher.js off Semantic UI React 2026-08-08 18:04:02 -06:00
Flasher.test.js ui: migrate Flasher.js off Semantic UI React 2026-08-08 18:04:02 -06:00
Headline.js ui: nine leaf files off Semantic, and the components they needed 2026-08-08 18:04:00 -06:00
HelpModal.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
KeyboardShortcutsProvider.js ui: fix the cypress failures, and two real defects behind them 2026-08-08 18:04:01 -06:00
Map.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
MapSearchView.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
MapViewer.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
Nav.js ui: Nav off Semantic, and the memory warning starts working 2026-08-08 18:04:02 -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-08 18:04:00 -06:00
Playlists.js ui: Channels.js and Playlists.js off Semantic 2026-08-08 18:04:01 -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-08 18:04:01 -06:00
SearchFilterModal.test.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
Share.js ui: nine leaf files off Semantic, and the components they needed 2026-08-08 18:04:00 -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-08 18:04:00 -06:00
Tables.js ui: nine leaf files off Semantic, and the components they needed 2026-08-08 18:04:00 -06:00
TaggedDeleteConfirmModal.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -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: the last Semantic UI file, and the stylesheet with it 2026-08-08 18:04:03 -06:00
ThemeProvider.test.js ui: media filtering is a per-theme setting, not a night-mode hardcode 2026-08-08 18:04:00 -06:00
ThemeSamplePage.js ui: PathInput, and the media directory stops printing over the value 2026-08-08 18:04:03 -06:00
Upload.js ui: migrate Downloads, Upload, and BulkTagModal off Semantic 2026-08-08 18:04:02 -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-08 18:04:01 -06:00
VideoPlayer.test.js videos: address review — tighten auto-caption detection 2026-07-16 18:29:18 -06:00
Videos.js ui: video cards were missing the mimetype accent 2026-08-08 18:04:03 -06:00
VncToggle.test.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -06:00
Zim.js ui: migrate Docs.js and Zim.js off Semantic UI React 2026-08-08 18:04:01 -06:00