M7c: feature expense, S-7 editor and S-8 detail with timeline

Expense editor (S-7) and expense detail (S-8) in :feature:expense against the
:core:model interfaces and :core:design components: defaults (AC-8.6), keypad
input (§9.6), the four split modes with live preview (AC-8.5, AC-8.7, AC-8.8),
category suggestion with the picked-by-hand flag (CS-2, CS-3, CS-7), quick row
from frequentCategoryIds (D-059, D-060), inline errors, delete and discard
confirmations; detail with hero, facts, timeline, recurring, deleted and missing
states. Fake scenarios in fakes/expense, view-model tests and 127 goldens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
This commit is contained in:
2026-10-18 10:54:16 +02:00
parent 0e1d99df93
commit 0b140aa3ad
15 changed files with 2520 additions and 14 deletions
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- :feature:expense strings, keys from docs/ux/strings.csv (module=expense). -->
<resources>
<string name="expense_editor_new">New expense</string>
<string name="expense_editor_edit">Edit expense</string>
<string name="expense_editor_date">Date</string>
<string name="expense_editor_delete">Delete expense</string>
<string name="expense_editor_discard_title">Discard the expense?</string>
<string name="expense_detail_title">Expense</string>
<string name="expense_detail_account">Account</string>
<string name="expense_detail_date">Date</string>
<string name="expense_detail_paid_by">Paid by</string>
<string name="expense_detail_split">Split</string>
<string name="expense_detail_notes">Notes</string>
<string name="expense_detail_recurring">Recurring: %1$s</string>
<string name="expense_detail_delete_title">Delete the expense?</string>
<string name="expense_detail_delete_body">It disappears for both of you.</string>
<string name="expense_detail_deleted_banner">%1$s deleted this expense · %2$s</string>
<string name="expense_detail_deleted_body">It no longer counts in balances or analytics.</string>
<string name="expense_detail_missing">This expense is not on the phone yet</string>
<string name="expense_detail_missing_body">It may have just been added on another phone. Sync to fetch it.</string>
<!-- Not in strings.csv yet (proposed in the M7c report): S-8 "Synka nu" and the split label "Allt på dig". -->
<string name="expense_detail_sync_now">Sync now</string>
<string name="expense_split_full_on_you">All on you</string>
</resources>