feat(balance): inline period-earnings in the address list and totals

Surfaces the period-earnings aggregator in the Balance tab:
- Toolbar (shared address list): interval pills (1H/1D/1M/1Y), a received-
  vs-net mode toggle, and a global show-all toggle, placed right of "Hide 0
  Balances". The New Z-Address / New mining address buttons move to a footer
  row across from "Showing X of Y" to make room.
- Per address: the row draws its earnings on line 2, left of the $USD value
  (green positive, red negative in net mode), shown when the global toggle
  is on or the address is opted in via a new "Show/Hide earnings" right-click
  item. Works in every layout via the shared list.
- Total: FormatTotalEarnings (gated on the global toggle, so the default
  appearance is unchanged) is wired into the compact hero (dashboard/minimal)
  and the classic layout, left of / beside their USD figure. The remaining
  layouts' totals are not wired yet.
- Settings > Appearance: an "Earnings Display Format" selector (Coin /
  Coin + fiat / Fiat).

New i18n keys are translated into all eight locales; the CJK subset font is
rebuilt for the new glyphs. Builds + test suites pass on both variants.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-10-15 11:22:12 -05:00
co-authored by Claude Opus 4.8
parent 2ef91ea7d4
commit 064c9d1b61
14 changed files with 335 additions and 40 deletions
+12
View File
@@ -1065,6 +1065,18 @@ void I18n::loadBuiltinEnglish()
strings_["filter"] = "Filter...";
strings_["no_addresses_yet"] = "No addresses yet";
strings_["showing_x_of_y"] = "Showing %d of %d addresses";
strings_["tt_earn_interval"] = "Earnings period: 1H = this hour, 1D = today, 1M = this month, 1Y = this year";
strings_["tt_earn_mode_inflows"] = "Earnings mode: amounts received (including mined)";
strings_["tt_earn_mode_net"] = "Earnings mode: net (received minus sent)";
strings_["tt_earn_show_all"] = "Show the earnings figure for every address";
strings_["show_earnings"] = "Show earnings";
strings_["hide_earnings"] = "Hide earnings";
strings_["earnings_label"] = "Earnings";
strings_["earnings_format"] = "Earnings Display Format";
strings_["tt_earnings_format"] = "How the per-address and total earnings figures are shown";
strings_["earnings_format_coin"] = "Coin only";
strings_["earnings_format_coin_fiat"] = "Coin + fiat";
strings_["earnings_format_fiat"] = "Fiat only";
strings_["set_label"] = "Set Label";
strings_["copied"] = "Copied!";
strings_["hidden_tag"] = " (hidden)";