OnSystem — Fintech Bundle

LiveDataBadge

@onsystem-fintech/LiveDataBadge

Structurally-visible demo-vs-live indicator. Any real-time-styled component renders this next to it by convention — the live/demo distinction is a default, not an opt-in a builder can forget.

state: live
Live
state: live, but the feed went quiet six minutes ago
Updated 6m ago
state: demo
Demo data

MaskedValue

@onsystem-fintech/MaskedValue

Shared with the Internal Tools kit (StatCard's masked prop composes this too) — one consistent reveal/hide pattern for balances and account numbers, installed once at the same shared path.

size: sm — masked (default)
••••••
size: sm — revealed
$4,812.33
size: lg — masked (default)
••••••
size: lg — revealed
$18,230.00

ProgressScale

@onsystem-fintech/ProgressScale

A progress bar that can never render without a stated reference scale — min/max are required props specifically so a caller has to decide the scale, and it's always labeled.

under target (role: success, auto)
Monthly budget$3,200 of $5,000
0Budget5,000
over target (role: warning, auto)
Monthly budget$5,400 of $6,000
0Budget6,000
no target
Credit utilization68%
0100
explicit role override (danger)
Credit utilization92%
0100

ErrorState

@onsystem-fintech/ErrorState

Reassuring error presentation for money-related contexts — replaces the raw dev-error overlays the fintech audit found leaking mid-workflow, with a calm explanation that data is safe.

default copy, no retry
Something went wrong
Your data is safe — nothing was changed or lost. Try again, or check back in a moment.
custom copy + retry
Couldn't load your transactions
Your data is safe — nothing was changed. Try again in a moment.

Money

@onsystem-fintech/Money

A figure that will not render without a currency. Precision comes from the currency's own ISO minor units rather than a .toFixed(2) at the call site, and the sign is derived from the direction of the movement while the amount stays a magnitude, so an outgoing payment cannot be signed twice.

USD and JPY: the same call, different precision, because the currency says so
$4,812.33¥4,812BHD 4,812.333
direction derives the sign; the amount is always a magnitude
-$84.21+$3,200.00
accounting negatives, for ledgers and statements
(€642.18)-€642.18
an unrecognised currency renders an em dash rather than a guess
ZZZ 100.00

AccountSummary

@onsystem-fintech/AccountSummary

A row of balance cards, masked-value as a first-class variant. Composes StatCard the same fixed four-slot way Reports.tsx does for the Internal Tools kit.

viewState: ready (default)

Accounts

Checking
••••••
•••• 4471
Savings
••••••
•••• 9012
Credit card
-$642.18
Payment due in 6 days
Investing
••••••
•••• 2290
Total4 accounts$54,505.02
multi-currency: subtotals per currency, and no combined total

Accounts (multi-currency)

US checking
$4,812.33
•••• 4471
EU current
€9,140.50
•••• 8820
EU savings
€21,500.00
•••• 3311
Total (EUR)2 accounts€30,640.50
Total (USD)1 account$4,812.33
No combined total: these accounts are held in 2 currencies and no exchange rate was supplied. A single figure here would be one this screen invented.
viewState: loading

Accounts

Checking
Savings
Credit card
Investing
viewState: empty

Accounts

No accounts connected
Connect an account to see your balances here.
viewState: error
Couldn't load your accounts
Your balances are safe — nothing was changed. Try again in a moment.

TransactionList

@onsystem-fintech/TransactionList

Filterable, chronologically-guaranteed transaction list — initialSort locks in date order regardless of incoming row order, fixing the audit's unsorted 'Recent Expenses' failure. Reuses the same DataTable + FilterBar installed for Internal Tools.

viewState: ready (default)

Transactions

Ordered and totalled by booking date. Value dates may fall on a later day, so a balance here can differ from the one your bank shows until everything settles.

DateMerchantCategoryAmountBalance
Jul 12, 2026Whole FoodsGroceries-$84.21$6,685.74
Jul 11, 2026Payroll depositIncome$3,200.00$6,769.95
Jul 10, 2026Electric Co.Utilities-$142.50$3,569.95
Jul 8, 2026Downtown ApartmentsRent-$1,850.00$3,712.45
Jul 6, 2026Transit AuthorityTransport-$62.00$5,562.45
Jul 3, 2026Corner CafeDining-$18.40$5,624.45
1–6 of 6
Opening balance$5,642.85
Net movement+$1,042.89
Closing balance$6,685.74
viewState: loading

Transactions

DateMerchantCategoryAmount
1–6 of 6
viewState: empty

Transactions

DateMerchantCategoryAmount
No records yet
Nothing has been added here.
1–6 of 6
viewState: error

Transactions

DateMerchantCategoryAmount
Failed to load records
Check your connection and try again.
1–6 of 6

CategoryBreakdown

@onsystem-fintech/CategoryBreakdown

A donut chart with an always-labeled legend — slice colors only ever come from the five semantic roles, and every slice pairs a swatch with a text label and formatted value.

with data (default)

Spending by category

Total$2,756.00
  • Housing$1,850.0067%
  • Groceries$512.0019%
  • Transport$210.008%
  • Dining out$184.007%
empty

Spending by category

No spending yet
Categorized spending will appear here.

PriceChart

@onsystem-fintech/PriceChart

A real-time price chart with an explicit live-vs-demo data state, required (not optional) — fixes the audit's 'Real-Time Chart' template whose animated last point faked liveliness with no disclosure.

dataState: live
ACMELive
$187.80+2.96%
dataState: demo
DEMODemo data
$187.80+2.96%
viewState: loading
ACMELive
viewState: empty
ACMELive
Not enough data yet
Price history will chart here once available.
viewState: error
Couldn't load ACME's price
No trades were placed and no data was lost — try again in a moment.

InvoiceGenerator

@onsystem-fintech/InvoiceGenerator

Itemized invoice with computed totals — quantity × unit price is always derived, never independently entered, so line totals and the document total can't drift apart. Fully interactive below.

interactive
Line items
Quantity × unit price is calculated automatically.
Total$600.00
Total$2,400.00
Subtotal$3,000.00
Tax (8.5%)$255.00
Total$3,255.00

TransferFlow

@onsystem-fintech/TransferFlow

A payment/transfer action gated by a type-to-confirm step — moving money is at least as consequential as a permanent record delete, so a reflexive click can't complete it. Fully interactive below.

interactive
From
Checking •••• 4471••••••
To•••• 9087
Transfers complete within 1 business day.