blocks.tsx
Sketch-style building blocks. Every template is assembled from these.
Wire button. Primary is the filled one.
props: children, variant? (default | primary | link), block?, onClick?
Title, optional subtitle, secondary and primary action.
props: title, subtitle?, primary?, secondary?, onAction?, mobile?
Invoices
Invoices
Invoices
Static table. Money and numbers align right, status renders as a pill. Becomes cards on mobile.
props: columns, rows, onRow?, mobile?
| Customer | Amount | Status | Due date | |
|---|---|---|---|---|
| Stark Supply | $2,651.44 | Open | Apr 5, 2026 | |
| Northwind | $5,440.15 | Paid | May 24, 2026 | |
| Globex | $1,224.08 | Open | Jul 7, 2026 | |
| Globex | $1,458.50 | Overdue | Feb 15, 2026 | |
| Umbrella Ltd | $5,017.87 | Open | Nov 15, 2026 |
Static (non-interactive) field, used by settings and the confirm modal.
props: field, index?
DataTable that loads 8 more seeded rows when its end scrolls into view, up to 120. Scroll the page to see it load.
props: seed, columns, onRow?, mobile?, live?
| Customer | Amount | Status | Due date | |
|---|---|---|---|---|
| Stark Supply | $7,180.18 | Open | Sep 24, 2026 | |
| Northwind | $3,191.93 | Paid | Sep 19, 2026 | |
| Acme Corp | $6,844.99 | Overdue | May 15, 2026 | |
| Vandelay Imports | $2,191.51 | Open | Apr 24, 2026 | |
| Initech | $4,681.32 | Overdue | Jan 23, 2026 | |
| Vandelay Imports | $9,026.73 | Paid | Mar 8, 2026 | |
| Vandelay Imports | $3,323.40 | Overdue | Apr 23, 2026 | |
| Umbrella Ltd | $4,939.79 | Paid | Nov 14, 2026 | |
| Initech | $9,748.44 | Open | Jan 18, 2026 | |
| Soylent Co | $2,088.79 | Overdue | Oct 2, 2026 | |
| Globex | $2,861.44 | Paid | Oct 8, 2026 | |
| Initech | $7,997.60 | Paid | Dec 13, 2026 | |
| Umbrella Ltd | $5,695.17 | Overdue | Dec 5, 2026 | |
| Globex | $6,286.81 | Paid | Jan 23, 2026 | |
| Northwind | $9,186.94 | Open | Feb 7, 2026 | |
| Acme Corp | $8,877.40 | Paid | Sep 2, 2026 |
| Customer | Amount | Status | Due date | |
|---|---|---|---|---|
| Hooli | $4,382.59 | Paid | Jan 20, 2026 | |
| Wayne Freight | $6,507.72 | Paid | Jul 18, 2026 | |
| Soylent Co | $4,049.79 | Open | Sep 12, 2026 | |
| Stark Supply | $5,545.15 | Paid | Jun 14, 2026 | |
| Soylent Co | $9,490.84 | Paid | Jul 15, 2026 | |
| Acme Corp | $3,787.18 | Open | Oct 4, 2026 | |
| Wayne Freight | $752.58 | Open | Aug 4, 2026 | |
| Stark Supply | $1,975.35 | Paid | Apr 25, 2026 | |
| Umbrella Ltd | $1,298.42 | Open | Mar 28, 2026 | |
| Vandelay Imports | $6,892.05 | Paid | Feb 9, 2026 | |
| Globex | $3,913.04 | Overdue | Jan 25, 2026 | |
| Acme Corp | $7,853.53 | Open | Feb 8, 2026 | |
| Initech | $7,733.68 | Overdue | Jul 8, 2026 | |
| Vandelay Imports | $9,672.18 | Open | Aug 27, 2026 | |
| Umbrella Ltd | $6,512.82 | Paid | Nov 5, 2026 | |
| Umbrella Ltd | $1,556.71 | Overdue | Dec 2, 2026 |
Real inputs with validation from field rules. Errors on blur and on submit; a valid submit fires the primary action.
props: fields, primary?, secondary?, onAction?, columns? (1 | 2), blockButtons?, live?
Row of page actions: Share, Export, then the secondary and primary actions.
props: primary?, secondary?, onAction?