feat(ui): add month view with income entry and post table
Negative remaining balances are shown in a warning treatment; nothing blocks going over budget. Applies the Tasks 18-23 design contract: --paper/--ink/--rule/--accent/ --surplus/--overspend tokens and the three type-role font variables in src/index.css, --font-money on every money figure, and the carry meter (a 3px hard-stopped gradient beneath each PostTable row) encoding carried-in surplus, allocation track, spend fill and overrun. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
ccb97818d7
commit
dd612565cb
16 files changed
+914
-75
No files matched your search
@@ -0,0 +1,20 @@
|
||||
import type { Currency } from "../domain/types.ts";
|
||||
|
||||
// Pinned locale: output must not vary between the user's machine and CI.
|
||||
const NUMBER = new Intl.NumberFormat("en-GB", {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2,
|
||||
});
|
||||
|
||||
export function formatAmount(amount: number): string {
|
||||
return NUMBER.format(amount);
|
||||
}
|
||||
|
||||
export function formatMoney(amount: number, currency: Currency): string {
|
||||
return `${formatAmount(amount)} ${currency}`;
|
||||
}
|
||||
|
||||
export function formatSignedMoney(amount: number, currency: Currency): string {
|
||||
const sign = amount > 0 ? "+" : "";
|
||||
return `${sign}${formatMoney(amount, currency)}`;
|
||||
}
|
||||
Reference in new issue
Block a user