flip columns

This commit is contained in:
Emil Lerch 2026-04-22 15:34:43 -07:00
parent 8561a130e0
commit 52e7a703bd
Signed by: lobo
GPG key ID: A7B62D657EF764F8

View file

@ -360,9 +360,10 @@ pub fn fmtSignedMoney(buf: []u8, value: f64) ![]const u8 {
return std.fmt.bufPrint(buf, "{s}{s}", .{ prefix, abs_str });
}
/// Render a multi-metric timeline: Date | Net Worth | Liquid | Illiquid,
/// Render a multi-metric timeline: Date | Illiquid | Liquid | Net Worth,
/// with each column showing both current value and Δ from the first row.
/// This is the default view it answers "how did my net worth change
/// Columns read left-to-right as "components summing to the total"
/// illiquid + liquid = net worth. Answers "how did my net worth change
/// and was it liquid vs. illiquid?" in one glance.
///
/// Takes a TimelinePoint slice directly (rather than already-extracted
@ -384,7 +385,7 @@ pub fn renderPortfolioTimelineAll(
try cli.setFg(out, color, cli.CLR_MUTED);
try out.print("{s:>12} {s:>28} {s:>28} {s:>28}\n", .{
"Date", "Net Worth (Δ)", "Liquid (Δ)", "Illiquid (Δ)",
"Date", "Illiquid (Δ)", "Liquid (Δ)", "Net Worth (Δ)",
});
try out.print("{s:->12} {s:->28} {s:->28} {s:->28}\n", .{ "", "", "", "" });
try cli.reset(out, color);
@ -396,21 +397,22 @@ pub fn renderPortfolioTimelineAll(
for (points) |p| {
var db: [10]u8 = undefined;
try out.print("{s:>12} ", .{p.as_of_date.format(&db)});
try writeValueDeltaCell(out, color, p.net_worth, p.net_worth - first_nw);
try writeValueDeltaCell(out, color, p.illiquid, p.illiquid - first_ill);
try out.writeAll(" ");
try writeValueDeltaCell(out, color, p.liquid, p.liquid - first_liq);
try out.writeAll(" ");
try writeValueDeltaCell(out, color, p.illiquid, p.illiquid - first_ill);
try writeValueDeltaCell(out, color, p.net_worth, p.net_worth - first_nw);
try out.writeByte('\n');
}
// Three-line summary footer: one line per metric, showing first
// last and absolute/percent change. More readable than stuffing
// everything into one wide line.
// everything into one wide line. Ordered to match the column layout
// above (components first, total last).
try out.print("\n", .{});
try writeSummaryLine(out, color, " Net Worth", mapMetric(points, .net_worth));
try writeSummaryLine(out, color, " Liquid ", mapMetric(points, .liquid));
try writeSummaryLine(out, color, " Illiquid ", mapMetric(points, .illiquid));
try writeSummaryLine(out, color, " Liquid ", mapMetric(points, .liquid));
try writeSummaryLine(out, color, " Net Worth", mapMetric(points, .net_worth));
try out.print("\n{d} snapshots\n\n", .{points.len});
}