Skip to content

Slimbooks v3.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 21 Sep 22:53
· 49 commits to main since this release

Release v3.1.0

Upgrading from 3.0.0 asks nothing of you. No environment variable changed, no
migration was added, and nothing needs a manual step — pull the image or the
tag, restart, and you are done. If 3.0.0 is running, your .env is already
correct for this release.

What changed

Every dialog in the application is now a real one. All thirteen modals were
rebuilt on the browser's native element, so each now traps focus,
closes on Escape, renders above the rest of the page, makes the content behind
it inert, and hands focus back to whatever opened it. Eleven of the thirteen
had none of that before — they were plain overlays a keyboard user could tab
straight out of, with no way to close them from the keyboard at all. The
connection-lost dialog is the deliberate exception to Escape: it stays put,
because a dropped connection is not something you can dismiss your way out of.

React was upgraded to 19, and @types/express from 4 to 5 — the latter matching
the Express 5.2.1 runtime the server has actually been running since 3.0.0, so
the old types were the thing that was wrong.

Five frontend dependencies were removed, roughly 1.1 MB: the four @radix-ui
packages and class-variance-authority. The native dialog work replaced
everything they were still doing.

Fixed

A clean checkout could not install. react-dom had been raised to 19 while react
stayed at 18 — an unsatisfiable peer dependency that made npm ci fail outright,
breaking CI, the release workflow and both Docker builds. If you build from
source, this is the release that repairs it.

Known issue

A toast raised from inside an open dialog is currently painted behind it and
cannot be clicked. This affects the error shown for a malformed CSV in the
client, expense and payment import dialogs, and the failure notice when a PDF
cannot be generated — in those cases the operation fails silently rather than
telling you why. The import itself is unaffected; only the message is lost. A
fix is planned for the next release.