wrolpi/app/src
Roland eab13e4803
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-08 18:05:45 -06:00
..
api controller: VNC toggle, gated on the Desktop running 2026-07-29 18:10:05 -06:00
components ui: give tables a real header, drop the column grid, quiet the row rules 2026-08-08 18:05:45 -06:00
contexts test: one place for fixtures, real providers instead of mocked context modules 2026-08-08 18:04:04 -06:00
hooks build: uninstall Semantic UI 2026-08-08 18:04:03 -06:00
themes ui: give tables a real header, drop the column grid, quiet the row rules 2026-08-08 18:05:45 -06:00
types ui: the last Semantic UI file, and the stylesheet with it 2026-08-08 18:04:03 -06:00
api.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
App.css ui: give tables a real header, drop the column grid, quiet the row rules 2026-08-08 18:05:45 -06:00
App.js ui: the last Semantic UI file, and the stylesheet with it 2026-08-08 18:04:03 -06:00
DashboardPage.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
DashboardPage.test.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
Events.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
index.css ui: the last Semantic UI file, and the stylesheet with it 2026-08-08 18:04:03 -06:00
index.js Fixing changes before merge. 2023-02-08 21:18:51 -07:00
logo.svg Renaming examples to avoid grouping of pdf with ebooks. Reworking URLs for media files to avoid escaping url safe characters. 2023-03-29 13:46:39 -06:00
reportWebVitals.js Renaming examples to avoid grouping of pdf with ebooks. Reworking URLs for media files to avoid escaping url safe characters. 2023-03-29 13:46:39 -06:00
semantic-baseline.json ui: the last Semantic UI file, and the stylesheet with it 2026-08-08 18:04:03 -06:00
semantic-baseline.test.js build: uninstall Semantic UI 2026-08-08 18:04:03 -06:00
setupTests.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -06:00
Tags.cy.js Video downloads have many more options. Downloads are migrated. 2024-11-28 09:48:57 -07:00
Tags.js ui: map the twelve icon names that were rendering as question marks 2026-08-08 18:05:45 -06:00
Tags.test.js ui: tags look like tags, and stay readable in every theme 2026-08-08 18:05:44 -06:00
test-fixtures.js test: check declared types, not just field names, and fix the three that were wrong 2026-08-08 18:05:08 -06:00
test-fixtures.test.js test: one place for fixtures, real providers instead of mocked context modules 2026-08-08 18:04:04 -06:00
test-utils.js test: the theme drives the colour scheme, and mockModule takes the module 2026-08-08 18:04:04 -06:00
test-utils.test.js test: the theme drives the colour scheme, and mockModule takes the module 2026-08-08 18:04:04 -06:00