wrolpi/app/src/components
Roland ee657d950f ui: give tables a real header, drop the column grid, quiet the row rules
Three things the file browser made obvious.

The header was not a surface.  Mantine gives thead no background at all, so
the header painted whatever was behind the table -- which is exactly what an
unstriped body row paints.  Against a striped body it read as one more stripe,
and bold type was the only thing distinguishing it.  It now carries `--head`,
the token that already means "recessed surface", with a full-strength 2px rule
under it: the header/body division is the one line in a table that carries
meaning, so it is the one allowed to be loud.

Column borders are gone.  A line around every cell is a lot of ink to repeat
what the column headings already say, and it was half of why the header
disappeared -- a bordered header cell looks like a cell in a grid.

Row rules were `--border`, the same weight as the outline around the table, so
a long table read as a stack of boxes.  They now use `--table-line`, a new
token per theme sitting between the surface and `--border`.  The table outline
is not a row rule and keeps `--border`; Mantine draws both from
`--table-border-color`, so that had to be restated.

In the file browser an icon and a filename are inline siblings in one cell.  An
inline SVG sits on the text baseline, so a 24px glyph beside 13px text hung
above it -- the icon looked centred in the row and the name looked like it was
resting on the icon's floor.  `vertical-align: middle` centres it, and the
margin is a gap that was never there at all: the folder icon touched the first
letter of its own name.

Cypress now loads App.css, as the app does.  Without it a spec covering the
file browser rows measures a component the app never renders.

One jest test and eleven browser tests, each checked red against a planted
regression.  Two notes for the next person:

  - `html .mantine-Table-table` is specificity, not decoration.  Mantine
    declares --table-border-color on its own hashed class, which ties with
    `.mantine-Table-table` and wins on source order.
  - the "quieter than the outline" test measures both lines against `--panel`.
    Nothing paints <html> under a mounted component, so measuring against the
    root background compares them to black, which ranks the *paler* line as the
    louder one -- the assertion passed backwards until it was pointed at the
    surface the rules actually sit on.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-01 17:10:03 -06:00
..
admin ui: name the directory fields, announce their help text, let long prefixes shrink 2026-07-30 16:10:56 -06:00
calculators ui: thirty-five files off Semantic, leaving fifteen 2026-07-30 12:54:24 -06:00
collections build: uninstall Semantic UI 2026-07-30 14:50:47 -06:00
inventory ui: thirty-five files off Semantic, leaving fifteen 2026-07-30 12:54:24 -06:00
ui ui: give tables a real header, drop the column grid, quiet the row rules 2026-08-01 17:10:03 -06:00
AddToPlaylist.js ui: Common.js and thirteen more files off Semantic 2026-07-30 11:55:39 -06:00
Apps.js ui: Common.js and thirteen more files off Semantic 2026-07-30 11:55:39 -06:00
Archive.js ui: bring back the card mimetype accent 2026-07-30 13:51:05 -06:00
ArchivePreview.js ui: Common.js and thirteen more files off Semantic 2026-07-30 11:55:39 -06:00
BulkTagModal.js ui: migrate Downloads, Upload, and BulkTagModal off Semantic 2026-07-30 13:10:51 -06:00
BulkTagModal.test.js ui: migrate Downloads, Upload, and BulkTagModal off Semantic 2026-07-30 13:10:51 -06:00
Calculators.js ui: fix the cypress failures, and two real defects behind them 2026-07-30 12:54:24 -06:00
CbzViewer.js ui: Common.js and thirteen more files off Semantic 2026-07-30 11:55:39 -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-07-30 13:02:57 -06:00
Common.js ui: two more labels were painting text with an inline colour, and shorthand hex 2026-08-01 14:35:35 -06:00
Common.test.js ui: two more labels were painting text with an inline colour, and shorthand hex 2026-08-01 14:35:35 -06:00
DatesSelector.js ui: thirty-five files off Semantic, leaving fifteen 2026-07-30 12:54:24 -06:00
DesktopToggle.test.js ui: Common.js and thirteen more files off Semantic 2026-07-30 11:55:39 -06:00
Docs.js ui: migrate Docs.js and Zim.js off Semantic UI React 2026-07-30 13:07:48 -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-07-30 16:44:40 -06:00
DonatePage.js ui: nine leaf files off Semantic, and the components they needed 2026-07-30 11:55:39 -06:00
Download.cy.js build: uninstall Semantic UI 2026-07-30 14:50:47 -06:00
Download.js ui: thirty-five files off Semantic, leaving fifteen 2026-07-30 12:54:24 -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-07-30 11:55:39 -06:00
FileBrowser.js test: act on review — the skeleton guard was reading the wrong layer 2026-08-01 16:10:10 -06:00
FileBrowser.test.js test: the theme drives the colour scheme, and mockModule takes the module 2026-07-30 16:44:40 -06:00
FilePreview.js ui: FileBrowser.js and FilePreview.js off Semantic 2026-07-30 13:11:01 -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-07-30 13:51:05 -06:00
Flasher.js ui: two more labels were painting text with an inline colour, and shorthand hex 2026-08-01 14:35:35 -06:00
Flasher.test.js ui: migrate Flasher.js off Semantic UI React 2026-07-30 13:13:39 -06:00
Headline.js ui: nine leaf files off Semantic, and the components they needed 2026-07-30 11:55:39 -06:00
HelpModal.js ui: thirty-five files off Semantic, leaving fifteen 2026-07-30 12:54:24 -06:00
KeyboardShortcutsProvider.js ui: fix the cypress failures, and two real defects behind them 2026-07-30 12:54:24 -06:00
Map.js ui: thirty-five files off Semantic, leaving fifteen 2026-07-30 12:54:24 -06:00
MapSearchView.js ui: thirty-five files off Semantic, leaving fifteen 2026-07-30 12:54:24 -06:00
MapViewer.js ui: thirty-five files off Semantic, leaving fifteen 2026-07-30 12:54:24 -06:00
Nav.js ui: test the last four components, and put the last four in the gallery 2026-08-01 16:10:10 -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-07-30 11:55:39 -06:00
Playlists.js ui: Channels.js and Playlists.js off Semantic 2026-07-30 13:02:57 -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-07-30 12:54:24 -06:00
SearchFilterModal.test.js ui: thirty-five files off Semantic, leaving fifteen 2026-07-30 12:54:24 -06:00
Share.js ui: nine leaf files off Semantic, and the components they needed 2026-07-30 11:55:39 -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-07-30 11:55:39 -06:00
Tables.js ui: nine leaf files off Semantic, and the components they needed 2026-07-30 11:55:39 -06:00
TaggedDeleteConfirmModal.js ui: Common.js and thirteen more files off Semantic 2026-07-30 11:55:39 -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-01 15:27:39 -06:00
ThemeProvider.test.js test: act on review — observe the wiring, and stop the soft assertions 2026-08-01 15:27:39 -06:00
ThemeSamplePage.js ui: test the last four components, and put the last four in the gallery 2026-08-01 16:10:10 -06:00
Upload.js ui: migrate Downloads, Upload, and BulkTagModal off Semantic 2026-07-30 13:10:51 -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-07-30 13:07:09 -06:00
VideoPlayer.test.js videos: address review — tighten auto-caption detection 2026-07-16 18:29:18 -06:00
Videos.js ui: Statistic and StatisticGroup, and the four defects they had 2026-07-30 19:23:04 -06:00
VncToggle.test.js ui: Common.js and thirteen more files off Semantic 2026-07-30 11:55:39 -06:00
Zim.js ui: migrate Docs.js and Zim.js off Semantic UI React 2026-07-30 13:07:48 -06:00