195 components across 14 families, covering accounting and finance UI from money primitives to the close, controls, consolidation, tax and compliance. Not every one is built yet; each component page says whether it's implemented or spec only.
Families 1–8 are the design layer: primitives, surfaces, tables, charts. Families 9–13 are the domain layer: the general ledgerFoundationsGeneral ledgerThe complete set of accounts, holding every posted entry, receivables, payables, the close, controls, consolidation and metrics. The domain layer is where a component kit turns into accounting software.
The layer everything else composes. Build these first; nothing above them is right until they are.
#
Component
One line
1
Money
The core primitive. A monetary value, formatted correctly.
2
Delta
A signed change, with polarity and a redundant non-color cue.
3
Figure
A large display numeral with automatic size step-down.
4
Percent
Percent vs. percentage points, explicitly discriminated.
5
Rule
Single / double / section accounting rule lines.
6
StatusPill
Payment and reconciliationCloseReconciliationComparing our record to an external party's states.
7
Sparkline
Inline trend, one-shot draw.
8
Trend
Arrow + delta + optional sparkline, composed.
9
AsOf
Timestamp with live relative formatting and a stated timezone.
10
Redacted
Masked value with reveal.
11
Reference
Copyable transaction/account ID with disambiguated glyphs.
12
CurrencyBadge
ISO code + optional flag.
13
EntityMark
Bank/merchant logo with the full fallback ladder.
180
CardNetworkMark
Visa, Mastercard, Amex, Discover, JCB, UnionPay, Diners. One optical size, a text fallback.
169
Tooltip
Hover/focus restatementCloseRestatementRevising previously issued statements to correct an error material to them ("Big R") — comparatives are relabeled Restated and the error disclosed. Never the only home of a fact.
170
InfoTip
The ⓘ. Extra context that survives touch, because it opens on press.
The workhorse. Virtualized, sticky, priority-collapsing.
48
TransactionRow
Desktop row.
49
TransactionCard
The mobile re-rank.
50
TransactionDetail
Full detail sheet with attachments and audit trailControlsAudit trailThe immutable record of every state change.
51
LedgerTable
Double-entryFoundationsDouble-entryRecording every transaction as equal debits and credits, so the ledger proves itself with debit/credit columns and a balance check.
52
AgingTable
AR/AP buckets, 0-30-60-90+.
53
ReconciliationView
Two-pane matcher. The match animation.
54
CategoryPicker
Hierarchical with rule creation.
55
FilterBar
URL-param-backed filters with resolved-value chips.
56
BulkActionBar
Selection count + actions, safe-area aware.
57
ColumnManager
Show/hide/reorder with drag.
179
GroupPicker
One cut through a table, with subtotals per group.
58
ExportMenu
CSV/XLSX/PDF with a stated scope.
171
TableColumns
Sort and resize for a table that renders on the server.
172
ColumnHeader
The sortable, draggable header cell.
173
PeriodGrid
The ruled grid. Frozen panes, hidden columns, hover change, ⌘C.
182
BankStatement
Opening → lines with a running balance → closing, proven against the bank's own figure.
The largest gap in the market. Nothing else has these.
#
Component
One line
59
StatementTable
The shared shell: hierarchy, periods, rules.
60
StatementRow
Indent level, subtotal, total, expand.
61
ProfitAndLoss
P&L with period comparison and varianceFinance & planningVarianceActual less budget (or forecast) for one line, labeled favorable or unfavorable by the line's polarity: revenue above plan is favorable, a cost above plan is not. The sign is arithmetic; the label is the finding.
62
BalanceSheet
Assets / liabilities / equity, with the balance check.
Debit and credit as two columns. No signed-column variant.
92
JournalEntryForm
Line grid with live balance check and dimension capture.
93
JournalEntryTable
All entries, with the gapless-numbering check.
94
AccountPicker
Shows the normal balanceCore ledgerNormal balanceThe side that increases an account — debit for assets and expenses, credit for liabilities, equity and revenue, inverted for a contra account. Blocks non-postable accounts.
The highest-value screen in AR. Every case is a first-class path.
113
PaymentSuggestion
Invoice combinations summing exactly to a lump sum.
114
UnappliedCashPanel
Never revenue; net credit balances flagged as liabilities.
115
CreditNoteForm
Distinct from a refund and from a write-offReceivablesWrite-offRemoving an uncollectible receivable against the allowance for credit losses — under the allowance method it has no P&L effect; the expense was taken in the provision.
116
CollectionsWorklist
Promise-to-pay as a first-class object.
117
DunningTimeline
Per customer, not per invoice.
118
CustomerStatement
Printable. Print styles are first-class.
119
CustomerCreditPanel
Limit and exposure together, with hierarchy roll-up.
120
SalesOrderTable
Backlog, visually separated from ledger-derived numbers.
Per-line coding, required evidence, discount ROI surfaced.
123
BillDetail
Source document inline beside the coding.
124
BillRegister
Aging and approval state.
125
DuplicateBillAlert
Blocking. Duplicate payment is one of the most common AP losses.
126
ThreeWayMatch
Line-level variances, not header totals.
127
MatchExceptionQueue
The clerk's worklist.
128
ApprovalChain
Segregation of dutiesControlsSegregation of dutiesSplitting authorization, recording, custody of assets and reconciliation across different people, so no one person can both commit and conceal an error or fraud — at minimum, preparer ≠ approver enforced. Approvals bind to a version.
129
ApprovalInbox
Mobile-first, document inline.
130
PaymentRunBuilder
Shows the cash balance remaining after the run.
131
PaymentRunPreview
Hold-to-confirm. Partial failure is a first-class state.
132
CashRequirements
Due in 7/14/30 vs. available, payroll broken out.
133
VendorMaster
Bank details versioned, never overwritten.
134
BankDetailChangeAlert
The fraud-prevention surface.
135
ExpenseCapture
Camera-first, policy violations shown at entry.
136
CardTransactionMatch
Matched to receipts, never re-entered.
137
UninvoicedReceiptsReport
GR/IR aging. The evidence for the period-end accrualCloseAccrualAn expense incurred, or revenue earned, before it is invoiced — recorded at period end so it lands in the right period.
See roadmap. Summary: primitives → the money proof → the ledger core → the table → statements → the close → AR → AP → payments → swaps → dashboard → consolidation → polish.
The ledger core (family 9) comes before the statements because a statement is a view over journal entries. Build it the other way around and the statement can't drill down. The close (family 12) comes right after the statements, because the close is what the statements are for.
Release notes
Get an email when this spec changes
The docs are the contract the components are built against. When one changes, the component changes with it, and the copy in your repo does not.