BL-16733: Front & Back Matter page

The page now previews the real "Made with Bloom" badge built by the code books use, and opening a collection fixes a stale project-specific pack. Every reviewer is done and every suite passes. Nothing is waiting on you; it is ready for your own review.

Ready for review Mergeable Reviewers done Board: ready for my review 0 decisions waiting

What this PR is about

Problem

The new (React) Collection Settings dialog shows only a placeholder on its Front & Back Matter page. Choosing a front/back matter style, setting up the QR code on the "Made with Bloom" badge, and entering the place names that front matter shows can all still be done only in the old WinForms dialog.

What the PR does

  • Style: the list of front/back matter packs, with the chosen pack's description. The dialog's GET carries the packs and whether the branding chose one (the list is then disabled).
  • A stale project pack is fixed on open: a saved project-specific pack that no branding chooses (as when the subscription that chose it expires) is replaced with the default and saved, so books and both dialogs agree. It isn't done on the command line, for a Team Collection member who isn't an administrator, or for a pack the user installed themselves, and an expired subscription's bookshelf is kept.
  • QR Codes: Show QR Codes and Caption, plus a live preview of the badge. C# builds the preview with the same code that builds books' badges (GET collection/qrBadge, with its QR image from GET collection/qrCode), and the dialog styles it with bloom-badge.less, the badge CSS moved out of branding-base.less for books and the dialog to share.
  • Places: Country, Province and District. Config-R doesn't yet show a group's description (sillsdev/config-r#32 adds it), so the page draws the Places heading itself.

Page Numbering Style goes with the Languages page (BL-16739).

Quality gate

CheckResult at 76d166e
TypecheckPass
Lint and formattingPass
TypeScript tests (vitest)Pass 112 files · 1620 tests. No front-end change since that run.
C# tests (dotnet test)Pass 3862 passed · 0 failed
Production bundle (build/agent-vite.sh)Builds
Repo check: e2e spec at the nightly window sizePass 2/2, headless
Merge with masterMergeable; master has not moved since the rebase.

What changed this run

Two fixes to the open-time pack rule: it now keeps an expired subscription's bookshelf in the file (found by Devin), and it leaves alone a project-specific pack the user installed their own copy of (found by the light review). The test notes on the card now mark what automated tests and live checks already cover. Commits.

Reviewer outcomes

ReviewerOutcome
Local reviewLight sub-agent pass on the whole diff. One finding: a user-installed copy of a project-specific pack would have been replaced on open. Fixed in 76d166e.
DevinComplete at 76d166e. Across these commits it raised the expired-bookshelf loss (fixed), an unused QR file for a corrupt badge (left as is, reasons on the thread), and the bundled copy of a same-named pack winning over an installed one (master's existing behavior, answered). Every thread has its outcome and is resolved; consultation log.
CodeRabbitNot active here: .coderabbit.yml turns auto review off.
CIOnly pr-automation (the Devin trigger) runs on this PR: pass.
Repo check (e2e)Passed, as above.

Worth knowing

  • BL-16735's branch is based on commits this PR's rebase replaced, so it needs rebasing onto this branch. Its session isn't running, so nobody has been told.
  • Found while testing, now on their own cards: a Team Collection member's Bloom can switch the whole team's front/back matter when a pack isn't installed on that computer (BL-17046), and the pack descriptions need an audit and a real translation process (BL-17047).

Decisions

None waiting.