Quantum stack

Markup canonic · components/quantum-stack.json

sursa = JSON · generat de scripts/build-catalog.py
Sumă
58,50 Lei
Tip document
Bon fiscal
Document
Descarcă
Descriere
Cafea cu clientul, la semnarea contractului pentru trimestrul trei

Ierarhia · stivă › grup › pereche › valoare

O înregistrare citită ca quante: fiecare quantă e un fapt etichetă–valoare. Perechile care țin împreună împart un card, cardurile se stivuiesc. Clasele stau peste clasele DS — .list-group, .list-row.value, .btn.link — și le schimbă doar unde o quantă diferă, deci orice alt rând de listă rămâne pe aspectul lui din List row. Un fapt a cărui valoare are nevoie de toată lățimea — o cronologie, o propoziție — e un .quantum-block: cardul lui, eticheta deasupra. Formalizat din Dublin (shared/dublin-ui/quantum-stack.tsx), regulă cu regulă.

.quantum-stack                       div  · coloană, 10px între grupuri
└─ .list-group.quantum-group         dl   · un card alb, --r-lg, 8px sus și jos, fără linii
   └─ .list-row.value.quantum-pair   div  · rând de 40px, eticheta stânga, valoarea dreapta
      ├─ .list-row-title             dt   · eticheta — 14px, fog, 400
      └─ .list-row-value             dd   · valoarea — 14px, ink, 500, se rupe dacă e lungă
         └─ .btn.link.quantum-action a / button · când valoarea e o acțiune — roz, 500, icon 16px
└─ .list-group.quantum-block         dl   · un fapt pe toată lățimea, cardul lui, frate al grupurilor
   ├─ .quantum-block-label           dt   · eticheta DEASUPRA — 14 / 22px, fog, 400
   └─ .quantum-block-body            dd   · corpul, la 8px — text (14px, ink, 500) sau o .timeline

În Dublin · detaliile unei cheltuieli

Stiva din dialogul unei cheltuieli, pe suprafața dialogului (bej-1). Fiecare fapt e un grup al lui, în afară de tipul documentului și documentul însuși, care țin împreună. În dialog: Record view.

.quantum-stack · 4 grupuri · lățimea corpului de dialog (392px)
Sumă
58,50 Lei
Dată
Tip document
Bon fiscal
Document
Descarcă
Plată
Plătită pe

În Dublin · detaliile unei facturi, cu un bloc

Stiva din dialogul unei facturi. Viața facturii nu încape la dreapta unei etichete, deci e un .quantum-block: cardul lui, eticheta deasupra în același fog de 14px ca perechile (nu eticheta de 11px majuscule), iar corpul — o Timeline — pe toată lățimea. Blocul stă în stivă între grupuri, la aceiași 10px.

.quantum-stack · 3 grupuri + 1 bloc + 1 grup · lățimea corpului de dialog (392px)
Sumă
12.400,00 Lei
Emisă
CUI client
RO38119245
Viața facturii
  1. Emisă
  2. Se trimite în e-Factura
  3. Așteaptă plata
Document
Descarcă

Valoarea · informație sau acțiune

Ce pui în valoare decide cum se citește — nu există variantă de ținut în pas cu conținutul. Informația (un text, o sumă, un <time>, un .badge) e ink la 14px / 500. O acțiune e .btn.link.quantum-action: roz, aceeași mărime și greutate ca o valoare text, cu un icon Lucide opțional înaintea etichetei — un <a> pentru o descărcare sau o pagină, un <button> pentru o acțiune pe loc. Doar linkul e ținta; rândul rămâne inert, așa că un grup poate amesteca rânduri de informație și de acțiune.

informație · text · sumă · dată · badge
Furnizor
Cafenea Origo
Sumă
1.234,56 Lei
Emisă
Stare
Plătită
acțiune · <a> cu icon · <button> fără icon
Document
Descarcă
Plată

Grupul · un rând sau mai multe

Rândul unei quante are 40px, în 8px de padding de card, fără linie între rânduri. Un grup cu un rând păstrează deci cei 56px ai rândului DS (40 + 2 × 8), iar perechile din același grup stau la 40px, despărțite doar de spațiu — un card de două rânduri are 96px și se citește ca o unitate lângă cardurile de 56px. Gruparea o fac golul de 10px dintre carduri și hairline-ul cardului.

un rând · 56px
Sumă
58,50 Lei
două rânduri · 96px · fără linie
Tip document
Bon fiscal
Document
Neatașat

Blocul · eticheta deasupra, corpul pe toată lățimea

O pereche își pune valoarea la dreapta etichetei. Unele valori au nevoie de lățimea cardului: o cronologie, o propoziție. .quantum-block e tot un fapt etichetă–valoare — un <dl> cu un <dt> și un <dd> — dar eticheta stă deasupra, iar corpul dedesubt, la 8px, în 16px × 20px de card. Un corp text se citește ca o valoare (14px / 500, ink) și se rupe; o Timeline își pune singură tipografia. Cardul lui, nu un rând într-un grup: lângă perechi, în același card, ar avea nevoie de o linie, iar grupurile n-au.

corp text · se rupe
Descriere
Cafea cu clientul, la semnarea contractului pentru trimestrul trei
între grupuri · același gol de 10px
Sumă
58,50 Lei
Descriere
Cafea cu clientul

Valoarea lungă · se rupe, eticheta rămâne

.list-row-value e nowrap pentru cifre. Într-o quantă valoarea ia white-space: normal și min-width: 0, iar eticheta flex-shrink: 0: o adresă lungă se rupe pe mai multe rânduri în loc să împingă eticheta afară. O sumă își păstrează propriul nowrap.

valoare text lungă · 392px
Adresă furnizor
Strada Ion Câmpineanu nr. 11, etaj 3, sector 1, București

Reguli

Trei niveluri, mereu

O pereche stă într-un grup, un grup stă într-o stivă. Un <dl> pe grup: eticheta se citește cu valoarea ei.

Rândul nu e ținta

Doar acțiunea din valoare e clicabilă. Pentru un rând care merge undeva, întreg, e .list-row.link — altă componentă, alt loc.

Spațiu, nu linii

Fără hairline între perechi și fără .list-group.sm pentru densitate (e rezervat .sheet și ar micșora și cardurile de un rând).

Blocul e cardul lui

Un .quantum-block stă în stivă lângă grupuri, niciodată într-un grup. Eticheta lui e cea a perechii — 14px, fog —, nu eticheta de 11px majuscule.