wrolpi/app/src/components
Roland 6ea9d3645f
ui: Common.js and thirteen more files off Semantic
Phase 2, part 3.  Baseline 63 -> 50.

Common.js is the one that mattered: 51 files import it, so its Semantic usage
was propping up the rest of the migration.  Everything in it now comes from the
library -- Paginator, the two search inputs, DirectorySearch, TabLinks, the
toggles, the messages, APIButton, Breadcrumbs, SimpleAccordion, IframeViewer,
CardPoster, FileIcon, LoadStatistic, the theme menu, and the hotspot icons.

Also migrated: Placeholder, Apps, ArchivePreview, CbzViewer, AddToPlaylist,
TaggedDeleteConfirmModal, the collection edit/tag forms, and four inventory
components.

New in the library, all in the gallery and tested:

  SearchBox     Semantic's `<Search category>` with its grouped results shape
                kept, because four call sites already build it.  A real
                combobox rather than a div that listens for clicks.
  Pagination    Semantic's prop names; onPageChange gets the page number.
  TabBar        the strip only -- routing stays with the caller.
  IconStack     Semantic's IconGroup, named once for assistive technology.
  Table.HeaderCell sorted/onSort -- a real button carrying aria-sort.
  Button/IconButton translate Semantic's size names.

That last one is defensive: unmigrated callers still pass size='tiny', and
Mantine drops a size it does not recognise without a word, so the button
quietly renders at the wrong size.  Mapping here keeps the mixed state honest.

Three real bugs found and fixed on the way, none of them cosmetic:

  * `fileSuffixIconName` returned fourteen icon names the map did not have, so
    opening a folder with a PDF, a Word document or an archive in it logged an
    error and drew a fallback glyph.  All fourteen mapped, with a test that
    walks the mapper's own return values, and another asserting every mapped
    name resolves to a Tabler component that exists.
  * `Statistic` relied on Semantic's `Statistic.Group` for its spacing, so on
    the dashboard the load averages ran together into "1 MIN. LOAD5 MIN.
    LOAD15 MIN. LOAD".  It carries its own spacing now.
  * Semantic's inverted stylesheet colors every descendant of an inverted
    segment, so Toggle labels inherited #dddddd -- white pixels in night mode,
    on the Settings page, which is exactly where someone adjusts their WROLPi
    in the dark.  Restated from tokens.

The baseline ratchet gained a third assertion: a migrated file may still lean
on Semantic's CSS classes without importing the library, which the import check
cannot see and which would collapse silently when Phase 4 deletes the
stylesheet.  There is one such bridge today and it is now declared.
2026-08-05 18:34:50 -06:00
..
admin ui: migrate the extension pages and Configs; five components they needed 2026-08-05 18:34:46 -06:00
calculators ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
collections ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
inventory ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
ui ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -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 app: handle form fetch failures without unhandled rejection 2026-07-16 19:40:28 -06:00
ArchivePreview.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
BulkTagModal.js Converting Theme.js to typescript so we can use shorthands like Card.Icon. 2025-12-07 12:41:10 -07:00
BulkTagModal.test.js Converting Theme.js to typescript so we can use shorthands like Card.Icon. 2025-12-07 12:41:10 -07:00
Calculators.js Moving OTP and Vin decoder to calculators to save Navbar space. Reworking calculators to purpose groups, and adding colors. 2026-07-01 18:48:06 -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 Add ordered collections (playlists): polymorphic items + item API (#475) 2026-06-11 19:46:34 -06:00
Common.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
Common.test.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
DatesSelector.js Consolidate search options into a single Filter modal (#497) 2026-06-23 19:49:25 -06:00
DesktopToggle.test.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
Docs.js Search: fast ABC mode by default, opt-in deep search 2026-07-03 10:32:16 -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-05 18:34:49 -06:00
Download.cy.js Adding edit form for Scrape downloader. 2024-12-03 12:44:38 -07:00
Download.js Archives can be compressed (SingleFileZ self-extracting HTML) (#477) 2026-06-11 19:46:35 -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 ui: nine leaf files off Semantic, and the components they needed 2026-08-05 18:34:49 -06:00
FileBrowser.test.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
FilePreview.js Open in Slicer: launch slicer programmatically from dropdown items. 2026-07-05 13:31:40 -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 Module pages: always show the deep-search reminder during fast searches 2026-07-03 10:50:57 -06:00
Flasher.js Flasher: show connect error next to the detect button too 2026-07-02 17:26:45 -06:00
Flasher.test.js Address Greptile review: fix chip-id map (17=C5, 18=P4) and drop stale mock 2026-07-02 17:26:37 -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 Adding videos page hotkeys to help play and navigate videos. Adding f hotkey for all local search fields (channel/domain/etc). Focusing when opening cookie modals. 2026-02-23 17:29:09 -07:00
KeyboardShortcutsProvider.js Adding fullscreen keyboard shortcut. 2026-03-27 17:59:36 -06:00
Map.js Add ordered collections (playlists): polymorphic items + item API (#475) 2026-06-11 19:46:34 -06:00
MapSearchView.js Map search added to global search. Preview cards are displayed for all results in new Map tab. 2026-04-13 12:17:08 -06:00
MapViewer.js Map search added to global search. Preview cards are displayed for all results in new Map tab. 2026-04-13 12:17:08 -06:00
Nav.js Moving OTP and Vin decoder to calculators to save Navbar space. Reworking calculators to purpose groups, and adding colors. 2026-07-01 18:48:06 -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 Playlists can be tagged on creation. Playlist destination is no longer empty by default. 2026-06-11 19:46:35 -06:00
Playlists.test.js Add ordered collections (playlists): polymorphic items + item API (#475) 2026-06-11 19:46:34 -06:00
Search.js Search: fast ABC mode by default, opt-in deep search 2026-07-03 10:32:16 -06:00
SearchFilterModal.test.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -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.test.js Fix "node.contains is not a function" crash on Modal/Popup triggers 2026-07-20 11:43:14 -06:00
Theme.tsx ui: media filtering is a per-theme setting, not a night-mode hardcode 2026-08-05 18:34:47 -06:00
ThemeProvider.test.js ui: media filtering is a per-theme setting, not a night-mode hardcode 2026-08-05 18:34:47 -06:00
ThemeSamplePage.js ui: nine leaf files off Semantic, and the components they needed 2026-08-05 18:34:49 -06:00
Upload.js Reformatting code. 2025-12-06 15:11:37 -07:00
Vars.js Restore "Most Views" download order 2026-07-07 16:34:50 -06:00
VideoPlayer.js videos: address review — tighten auto-caption detection 2026-07-16 18:29:18 -06:00
VideoPlayer.test.js videos: address review — tighten auto-caption detection 2026-07-16 18:29:18 -06:00
Videos.js Search: fast ABC mode by default, opt-in deep search 2026-07-03 10:32:16 -06:00
VncToggle.test.js ui: Common.js and thirteen more files off Semantic 2026-08-05 18:34:50 -06:00
Zim.js Fixing bug where zim articles were not aligned in modals. 2026-06-11 19:46:34 -06:00