feat(bookkeeping): journal-entry form UX — persistent tabs, focus-advance, opt-in balance fill, period guards (#650)

Captures working-tree changes to the journal-entry form:
- Persist form state across tab switches: forceMount the three bookkeeping tabs (page.tsx) + hide inactive forceMounted panels in the Tabs primitive (tabs.tsx; no-op for non-forceMount tabs).
- AccountCombobox: new onCommit callback fires on a definitive account selection (dropdown pick or full 4-digit entry); the form uses it to auto-advance focus to the debit field (mobile + desktop layouts via refs + visibility check).
- Replace the surprising auto-fill-balancing-amount on account select with opt-in double-click on a debit/credit field (handleFillBalance) — the prior behaviour misfired when splitting across lines.
- Keep exactly one trailing blank row (StrictMode-safe idempotent effect).
- Review-step safety warnings: different-month-than-last-voucher and closed/locked-period notices (paired sv/en strings) — guards against posting to the wrong month/period.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jakob Wennberg
2026-06-03 18:02:34 +02:00
committed by GitHub
co-authored by Claude Opus 4.8
parent dfd87dd294
commit 05651e6402
6 changed files with 145 additions and 23 deletions
+5 -1
View File
@@ -3040,7 +3040,11 @@
"toast_draft_saved_description": "The draft can be posted from the bookkeeping page.",
"toast_save_draft_failed": "Could not save draft",
"toast_attach_failed_title": "Documents could not be attached",
"toast_attach_failed_description": "{count} file(s) could not be linked to the journal entry. Try again from the bookkeeping page."
"toast_attach_failed_description": "{count} file(s) could not be linked to the journal entry. Try again from the bookkeeping page.",
"fill_balance_tooltip": "Double-click to fill the balancing amount",
"fill_balance_hint": "Tip: double-click debit or credit to fill the remaining difference.",
"review_month_changed": "Note: different month than the previous voucher ({prev} → {current}).",
"review_period_locked": "This period is closed or locked — posting may be rejected."
},
"chart_of_accounts": {
"class_1": "Assets",
+5 -1
View File
@@ -3040,7 +3040,11 @@
"toast_draft_saved_description": "Utkastet kan bokföras från bokföringssidan.",
"toast_save_draft_failed": "Kunde inte spara utkast",
"toast_attach_failed_title": "Underlag kunde inte bifogas",
"toast_attach_failed_description": "{count} fil(er) kunde inte länkas till verifikationen. Försök igen via bokföringssidan."
"toast_attach_failed_description": "{count} fil(er) kunde inte länkas till verifikationen. Försök igen via bokföringssidan.",
"fill_balance_tooltip": "Dubbelklicka för att fylla i balanserande belopp",
"fill_balance_hint": "Tips: dubbelklicka på debet eller kredit för att fylla i differensen.",
"review_month_changed": "Obs: annan månad än föregående verifikat ({prev} → {current}).",
"review_period_locked": "Perioden är stängd eller låst — bokföring kan nekas."
},
"chart_of_accounts": {
"class_1": "Tillgångar",