Semi-experimental
pa-sheet and the form primitives shown here (pc-grid, pa-table--plain, the print colour modes, and the rotation / vertical-text utilities) are still stabilising. Class names, modifiers and markup shape may change in upcoming releases — pin an exact version if you build on them, and check the CHANGELOG before upgrading.
Printable paper documents — invoices, orders, quotes, receipts and payment reminders — built from a set of blocks instead of hand-rolled HTML. pa-sheet is the white, centred, A4-width page with a screen-only drop shadow and a built-in @media print layer. Line items reuse the ordinary pa-table; label/value metadata reuse pa-fields / pa-desc-table. The examples below use fictional data (Twin Peaks Ltd. & friends).
window.print() prints the entire document. Each sheet below also has its own button that prints just that one sheet in isolation via pureAdmin.printElement() — no page-level print CSS needed.
INVOICE No. 2026-0184
Twin Peaks, 98065
Snoqualmie, 98065
| Description | Qty | Unit price | Discount | Amount |
|---|---|---|---|---|
| Application support Business portal maintenance & incident handling — August 2026 | 7 days | 7,500.00 | — | 52,500.00 |
| Application support Business portal maintenance & incident handling — September 2026 | 9 days | 7,500.00 | — | 67,500.00 |
Twin Peaks Ltd. is not a registered VAT payer.
Please note that if the due date shown on this invoice is not met, we will charge interest on late payment at the agreed or statutory rate, along with any contractual penalty where one has been agreed.
Twin Peaks, 98065
Reg. No. 12345678 · VAT No. GB12345678
Twin Peaks, 98065
Reg. No. 34567890 · VAT No. GB34567890
TAX INVOICE
| # | Item | Qty | Unit | Unit price (excl. VAT) | Line total | VAT rate |
|---|---|---|---|---|---|---|
| 1 | Crema pomodoro | 4.000 | pcs | 58.40 | 233.60 | 12.00% |
| 2 | Fusilli carbonara | 3.000 | pcs | 129.90 | 389.70 | 12.00% |
| 3 | Fusilli pollo spinaci | 6.000 | pcs | 121.50 | 729.00 | 12.00% |
| 4 | Gnocchi pollo gorgonzola | 9.000 | pcs | 112.30 | 1,010.70 | 12.00% |
| Taxable base (12%) | 2,363.00 | VAT (12%) | 283.56 |
| Total excl. VAT | 2,363.00 | Total VAT | 283.56 |
Payment Reminder
Philadelphia, 19106
Tel: 800 000 000
Twin Peaks, 98065
Reg. No. 12345678
Twin Peaks, 98065
Philadelphia, Sep 11, 2026
Dear Sir or Madam, unfortunately we have not yet received your payment for services in the amount of €4,187.60 for billing group No. 38716204. We kindly ask you to settle it by Sep 18, 2026. Your payment reference is 9438716204.
| Invoice No. | Due date | Outstanding |
|---|---|---|
| 3184029557 | Sep 3, 2026 | 4,187.60 |
If the amount reaches us by the stated date, we will not need to restrict your services. If you have already sent the payment, thank you.
INVOICE — Tax document
Twin Peaks, 98065
VAT No. GB12345678 · Reg. No. 12345678
Glastonbury, 06033
VAT No. GB45678901 · Reg. No. 45678901
PURCHASE ORDER
Snoqualmie, 98065
Reg. No. 56789012
Twin Peaks, 98065
Reg. No. 12345678
Twin Peaks, 98065
Attn: Goods inwards
| Item code | Description | Qty | Unit | Unit price | Amount |
|---|---|---|---|---|---|
| TP-COF-001 | Damn fine coffee (1 kg) | 40 | bag | 18.00 | 720.00 |
| TP-PIE-002 | Cherry pie (whole) | 25 | ea | 12.50 | 312.50 |
| TP-DON-003 | Assorted donuts (dozen) | 30 | box | 9.00 | 270.00 |
| TP-LOG-004 | Douglas fir log (decorative) | 5 | ea | 45.00 | 225.00 |
Please confirm receipt of this order and the expected dispatch date. Deliver during business hours (8:00–16:00). Quote the order number on all documents and packages.
DELIVERY NOTE
Twin Peaks, 98065
Snoqualmie, 98065
Attn: Goods inwards
Snoqualmie, 98065
| # | Item code | Description | Ordered | Delivered | Back-order | Unit | Unit price | Discount | Line total |
|---|---|---|---|---|---|---|---|---|---|
| 1 | TP-COF-001 | Damn fine coffee (1 kg) | 40 | 40 | 0 | bag | 18.00 | — | 720.00 |
| 2 | TP-PIE-002 | Cherry pie (whole) | 25 | 25 | 0 | ea | 12.50 | — | 312.50 |
| 3 | TP-DON-003 | Assorted donuts (dozen) | 30 | 24 | 6 | box | 9.00 | — | 216.00 |
| 4 | TP-LOG-004 | Douglas fir log (decorative) | 5 | 5 | 0 | ea | 45.00 | — | 225.00 |
| 5 | TP-TEA-005 | Fine herbal tea (100 bags) | 12 | 12 | 0 | box | 22.00 | — | 264.00 |
Item 3 is partially delivered — 6 units on back-order, expected within 5 business days. Please check goods on receipt and report discrepancies within 48 hours.
pc-grid + pa-table--plain + utilities — no CN23-specific classes.
| Detailed Description of Contents (1) Description détaillée du contenu |
Quantity (2) | Net Weight (3) | Value (5) | For commercial items only Pour les envois commerciaux seulement |
|
|---|---|---|---|---|---|
| HS Tariff Number (7) | Country of Origin of Goods (8) | ||||
| Total Gross Weight (4) | Total Value (6) | Postal Charges/Fees (9) | |||
pa-sheet regions as the LTR invoice — only dir="rtl" added; everything mirrors via logical properties.
فاتورة ضريبية مبسطة
الرياض ١٢٢١١، المملكة العربية السعودية
جدة ٢٣٤٤٢
| الوصف · Description | الكمية | سعر الوحدة | المبلغ (ر.س) |
|---|---|---|---|
| تمر العجوة الفاخر Premium Ajwa dates — علبة ١ كجم | ٢ | 85.00 | 170.00 |
| قهوة عربية مطحونة Ground Arabic coffee — كيس ٥٠٠ جم | ٣ | 45.00 | 135.00 |
| زعفران فاخر Premium saffron — علبة ٥ جم | ١ | 120.00 | 120.00 |
جميع المبالغ بالريال السعودي وشاملة ضريبة القيمة المضافة بنسبة ١٥٪.
شكراً لتسوقكم لدى متجر الأصالة — Thank you for shopping with us.
CSS Classes Reference
Block & modifiers
pa-sheet- A4-width white page, centred, screen shadow, built-in print layerpa-sheet--framed- Hairline outer borderpa-sheet--compact/--spacious- Tighter / looser padding + region rhythmpa-sheet--fluid- Fill the container instead of clamping to A4 widthpa-sheet--fill- Full A4-height page; the last region (footer) sinks to the page bottom even when content is short. Prints on exactly one page.pa-sheet--landscape- A4 landscape (297×210mm) for wide, many-column tables. Best printed on its own viapureAdmin.printElement(), which gives it a landscape page automatically; a whole-pagewindow.print()keeps one orientation, so it stays portrait there.pa-sheet--print-color- Print the accent/brand colours (title, logo, status) on white paper. Default is pure ink-on-paper.pa-sheet--print-grayscale- Like--print-color, desaturated to grey. No mode floods the background.
Regions
pa-sheet__masthead(--ruled) - Top band;__brand,__logo,__doctitle,__docmetapa-sheet__parties(--cols-3) - Party grid;__party(--boxed/--strong),__party-label,__party-name,__party-bodypa-sheet__meta(--boxed) - Right-aligned label/value grid;__meta-label,__meta-valuepa-sheet__title- Generic titled-section headingpa-sheet__totals(--start) - End-aligned summary column;__total-row(--grand),__total-label,__total-valuepa-sheet__notes- Prose block (terms, reminder copy)pa-sheet__barcode- Barcode slot (inject inline SVG, e.g. Code128 via JsBarcode)pa-sheet__qr/__qr-label- QR slot with a caption below the codepa-sheet__footer-__signatures→__sign;__legal;__pageno
Compose with existing blocks
- Line items →
pa-table-container>pa-table(any modifier) — the wrapper scrolls a wide table on mobile; the sheet strips its frame - Two-line item cell →
pa-table__item-title+pa-table__item-descinside a<td>(name + italic spec/description) - Metadata / party pairs →
pa-fields,pa-desc-table - Tax-breakdown box →
pa-tableorpa-desc-table - Chapter-style terms →
pa-document(numbered clauses)
Runtime tokens (CSS variables)
--pa-sheet-width- Page width (default 210mm)--pa-sheet-height- Page height for--fillon screen (default 297mm)--pa-sheet-padding- Inner page margin on screen--pa-sheet-gap- Vertical rhythm between regions--pa-sheet-rule-color- Masthead/total rule colour--pa-sheet-totals-width- Width of the totals column (default 42rem)--pa-sheet-sign-height- Blank height of a signature slot (default 6rem)--pa-sheet-qr-size- QR code square size (default 12rem)
Barcodes & QR codes: the framework ships only the placement slots (pa-sheet__barcode / pa-sheet__qr) — generate the code itself as inline SVG (JsBarcode, a QR library, or a server-rendered image). Use SVG, not <canvas>: a canvas prints blank via printElement() and blurs at print DPI. This demo uses JsBarcode + qrcode-generator (both SVG).
Printing (JavaScript)
window.print()- Prints the whole document (use with your own@media printto hide app chrome)pureAdmin.printElement(target, { title })- Prints a single element in isolation.target= element, CSS selector, or event. Clones it into a hidden iframe with the page's styles + theme mode.pureAdmin.printSheet(this, { title })- From a button inside a sheet; climbs to the enclosing.pa-sheetdata-print-omit/.pa-print-hide- Mark elements (e.g. the print button itself) to strip from the printout
The sheet ships its own @media print rules and a default @page { size: A4 }. The page margin is intentionally not set — the browser's own margin (the Margins setting the user picks in the print dialog) governs it; to pin a fixed margin, declare @page { margin: 15mm } after the framework. pureAdmin.printElement() (in src/js/sheet-print.js) is the reliable way to print one sheet without a page-level print stylesheet — the browser has no native single-element print.