StatementOfChangesInEquity
The fourth statement. Equity components across, movements down.
npx shadcn add @lopifi/statement-of-changes-in-equityExamples
The same component, case by case. Each stage is the shipped code with the props it shows; switch to Code for the usage.
Non-controlling interests
The parent's components subtotal before the interest's column, and net income still ties in total.
Does not foot
The ledger's retained earnings moved with no movement to explain it: the difference gets its own row.
With notes
A component and a movement point at the note that explains them; the marker is a real link.
How it behaves
What it renders, what it refuses to render, and why. The same paragraphs as the family spec, so the two can’t disagree.
The fourth statement. Equity components across (common stock, additional paid-in capital, retained earnings, accumulated other comprehensive income, treasury stock, non-controlling interests, total), movements down (opening balance, net income, other comprehensive income, dividends, share issuances, buybacks, share-based compensation, closing balance).
Common APIC Retained AOCI Treasury Total
stock earnings stock equity
Balance as of 31 Aug 2026 1,200 138,800 81,000 1,600 — 222,600
Net income — — 82,880 — — 82,880
Foreign currency translation — — — 460 — 460
Dividends declared — — (66,580) — — (66,580)
… ─────── ─────── ───────── ─────── ───────── ────────
Balance as of 30 Sep 2026 1,215 152,065 97,300 2,060 (4,200) 248,440
═══════ ═══════ ═════════ ═══════ ═════════ ════════
- It foots both ways, and shows it. Each column walks opening plus movements and is proved against the closing balance the ledger reports (
closingis an input, never derived, so the check can fail). Each row sums across into the total column. The cross-foot proves the total column's walk equals the closing balances summed across. All of it renders as checks under the grid. - A column that misses gets an "Unexplained difference" row in the grid, in the column that misses, the way a roll-forward's difference owns the screen.
- Ties to the other statements when given:
tieOut.netIncomeasserts the net income row against the P&L, andtieOut.balanceSheetEquityasserts closing total equity against the balance sheet. - Non-controlling interests (
nonControlling: true) total after an "Attributable to parent" subtotal, and the net income row still ties to consolidated net income in total. - Sparse by nature, never zero by accident. An absent component in a movement is no movement and renders
—;nullis unknown, rendersn/a, and blocks every sum it touches. - Amounts are signed as they move equity: a buyback is negative in treasury stock, a dividend negative in retained earnings. Treasury stock sits in its natural position, parenthesized.
- The opening date is the day before the period starts, stated in the row. Movements and components take an optional
note, rendered as aNoteRef. ComposesReportHeader; server-safe.
The accounting it encodes
The concepts this component renders, each defined once in the lexicon.
More in Statements
See also
Where this component is specified, defined and running.
Elsewhere in the system
The live section StatementOfChangesInEquity renders in, the calculators behind its figures, and the ledger payloads that feed it.
- StatementOfChangesInEquity, runningThe statements showcase — live, with theme, density, grayscale and reduced-motion switches.
- StatementsNo component library ships a <BalanceSheet />. That's the biggest gap in the market, and the reason Lopifi exists. Specs for 16 React components: StatementTable, StatementRow, ProfitAndLoss, BalanceSheet and 12 more.
Components are copied into your repository and meant to be edited. Rounding policy, fiscal calendar and compliance copy differ per company.
Release notes
Get an email when Statements changes
Your copy doesn’t update itself when we fix something here.
- One email when a Statements component needs a migration
- Nothing when nothing changes
Or install it now
npx shadcn add @lopifi/statement-of-changes-in-equity