@zevra/ui 0.30.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DECISIONS.md +42 -0
- package/dist/catalogue.d.ts.map +1 -1
- package/dist/catalogue.js +35 -2
- package/dist/catalogue.js.map +1 -1
- package/dist/content.d.ts +30 -0
- package/dist/content.d.ts.map +1 -1
- package/dist/content.js +12 -0
- package/dist/content.js.map +1 -1
- package/dist/css-inline.d.ts.map +1 -1
- package/dist/css-inline.js +1 -1
- package/dist/css-inline.js.map +1 -1
- package/dist/data.d.ts +11 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +2 -2
- package/dist/data.js.map +1 -1
- package/package.json +1 -1
- package/react/catalogue.tsx +78 -2
- package/react/content.tsx +57 -0
- package/react/css-inline.ts +1 -1
- package/react/data.tsx +16 -2
- package/src/components.css +121 -0
- package/src/data.css +44 -0
package/react/data.tsx
CHANGED
|
@@ -32,14 +32,28 @@ export interface TableProps extends Div {
|
|
|
32
32
|
/** Gabarit de colonnes, en syntaxe `grid-template-columns`
|
|
33
33
|
* (ex. `'minmax(0,2fr) 120px 90px'`). Hérité par l'en-tête et les lignes. */
|
|
34
34
|
gabarit?: string
|
|
35
|
+
/** Tableau de PROSE : les cellules reviennent à la ligne au lieu de
|
|
36
|
+
* tronquer, et les colonnes s'alignent en haut.
|
|
37
|
+
*
|
|
38
|
+
* ⚠️ À employer dès qu'une cellule porte une phrase plutôt qu'une donnée —
|
|
39
|
+
* une clause de contrat, un fondement juridique, une garantie de
|
|
40
|
+
* transfert. Tronquer une clause ne la raccourcit pas, ça la CACHE, et le
|
|
41
|
+
* lecteur n'a aucun moyen de savoir qu'il manque quelque chose. Le défaut
|
|
42
|
+
* (troncature) reste le bon choix pour une ligne de données, qui se balaye
|
|
43
|
+
* du regard et dont les colonnes ne doivent pas danser. */
|
|
44
|
+
prose?: boolean
|
|
35
45
|
className?: string
|
|
36
46
|
}
|
|
37
47
|
|
|
38
48
|
/** Le tableau défile DANS son cadre : sans ce confinement, une colonne trop
|
|
39
49
|
* large fait défiler la page entière et le rail de navigation part avec. */
|
|
40
|
-
export function Table({ gabarit, className, style, ...reste }: TableProps) {
|
|
50
|
+
export function Table({ gabarit, prose, className, style, ...reste }: TableProps) {
|
|
41
51
|
return (
|
|
42
|
-
<div
|
|
52
|
+
<div
|
|
53
|
+
className={cx('zv-table', prose && 'zv-table--prose', className)}
|
|
54
|
+
style={cols(gabarit, style)}
|
|
55
|
+
{...reste}
|
|
56
|
+
/>
|
|
43
57
|
)
|
|
44
58
|
}
|
|
45
59
|
|
package/src/components.css
CHANGED
|
@@ -1362,3 +1362,124 @@
|
|
|
1362
1362
|
.zv-legal__encart--important .zv-legal__encart-label {
|
|
1363
1363
|
color: var(--warn-ink);
|
|
1364
1364
|
}
|
|
1365
|
+
|
|
1366
|
+
/* ─── Page d'erreur ─────────────────────────────────────────────────────
|
|
1367
|
+
* HORS RELEVÉ (28/08/2026), voir DECISIONS.md « La page d'erreur ».
|
|
1368
|
+
*
|
|
1369
|
+
* Une page entière, pas un encart : 404, 403, 410, 500, maintenance. Elle
|
|
1370
|
+
* est ICI et non dans feedback.css parce que la landing Astro en a besoin
|
|
1371
|
+
* autant que les apps Next, et que components.css est le seul module que
|
|
1372
|
+
* les deux couches chargent réellement — c'est lui qui porte le bouton.
|
|
1373
|
+
*
|
|
1374
|
+
* ⚠️ Le bloc ne pose AUCUN texte et n'embarque AUCUNE image. Le glyphe
|
|
1375
|
+
* arrive en propriété (`@zevra/ui/glyphes`), la copie vient de l'app. Une
|
|
1376
|
+
* plaisanterie câblée dans un design system part dans les sept apps, dans
|
|
1377
|
+
* une seule langue, et n'en revient jamais. */
|
|
1378
|
+
|
|
1379
|
+
.zv-errpage {
|
|
1380
|
+
display: flex;
|
|
1381
|
+
flex-direction: column;
|
|
1382
|
+
align-items: center;
|
|
1383
|
+
justify-content: center;
|
|
1384
|
+
/* 70vh et non 100 : la page garde sa barre de navigation au-dessus et son
|
|
1385
|
+
* pied en dessous — une erreur n'est pas une raison de perdre la sortie. */
|
|
1386
|
+
min-height: 70vh;
|
|
1387
|
+
padding: 72px 24px;
|
|
1388
|
+
text-align: center;
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
/* La marque, en tête : sur une page qui n'a plus de contenu, c'est le seul
|
|
1392
|
+
* repère qui dit encore où l'on se trouve. */
|
|
1393
|
+
.zv-errpage__glyphe {
|
|
1394
|
+
width: 56px;
|
|
1395
|
+
height: 56px;
|
|
1396
|
+
object-fit: contain;
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
/* Le kicker, avec le filet de spectre — PREMIER de ses trois emplois
|
|
1400
|
+
* autorisés. C'est là que le code d'erreur se dit, en mono comme toutes les
|
|
1401
|
+
* métadonnées du système. */
|
|
1402
|
+
.zv-errpage__kicker {
|
|
1403
|
+
display: flex;
|
|
1404
|
+
align-items: center;
|
|
1405
|
+
gap: 12px;
|
|
1406
|
+
margin-top: 30px;
|
|
1407
|
+
}
|
|
1408
|
+
|
|
1409
|
+
.zv-errpage__titre {
|
|
1410
|
+
margin-top: 16px;
|
|
1411
|
+
font-family: var(--font-display);
|
|
1412
|
+
font-size: var(--h3);
|
|
1413
|
+
font-weight: 300;
|
|
1414
|
+
letter-spacing: -0.02em;
|
|
1415
|
+
line-height: 1.1;
|
|
1416
|
+
color: var(--ink);
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
.zv-errpage__texte {
|
|
1420
|
+
/* La mesure bornée n'est pas décorative : centré et pleine largeur, ce
|
|
1421
|
+
* paragraphe devient illisible dès 900px. Même raison qu'en
|
|
1422
|
+
* .zv-empty__text, et même ordre de grandeur. */
|
|
1423
|
+
margin: 14px auto 0;
|
|
1424
|
+
max-width: 480px;
|
|
1425
|
+
font-size: var(--lead);
|
|
1426
|
+
line-height: 1.6;
|
|
1427
|
+
color: var(--muted);
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
/* Deux actions au plus, et UN SEUL bouton plein : la sortie principale et
|
|
1431
|
+
* un recours. Au-delà, la page d'erreur devient un menu. */
|
|
1432
|
+
.zv-errpage__actions {
|
|
1433
|
+
display: flex;
|
|
1434
|
+
flex-wrap: wrap;
|
|
1435
|
+
justify-content: center;
|
|
1436
|
+
gap: 12px;
|
|
1437
|
+
margin-top: 30px;
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1440
|
+
/* La cote de l'incident : le code et le chemin demandé. Ce n'est pas un
|
|
1441
|
+
* ornement — elle donne au visiteur de quoi signaler la panne et au support
|
|
1442
|
+
* de quoi la retrouver. Sa forme est celle d'une référence de dossier, ce
|
|
1443
|
+
* qui est la seule illustration dont cette maison ait besoin. */
|
|
1444
|
+
.zv-errpage__ref {
|
|
1445
|
+
margin-top: 44px;
|
|
1446
|
+
padding-top: 14px;
|
|
1447
|
+
/* --line et NON --hairline : le cheveu (#eef1f8) est plus CLAIR que le
|
|
1448
|
+
* papier (#f5f6fa), donc invisible dès que la page ne repose pas sur du
|
|
1449
|
+
* blanc — et une page d'erreur repose sur le papier. Vu au navigateur ; le
|
|
1450
|
+
* trait était bien là, et ne se voyait pas. */
|
|
1451
|
+
border-top: 1px solid var(--line);
|
|
1452
|
+
min-width: 220px;
|
|
1453
|
+
font-family: var(--font-mono);
|
|
1454
|
+
font-size: var(--mono);
|
|
1455
|
+
font-weight: 600;
|
|
1456
|
+
letter-spacing: 0.14em;
|
|
1457
|
+
text-transform: uppercase;
|
|
1458
|
+
color: var(--label);
|
|
1459
|
+
/* Un chemin long ne doit pas pousser la page en défilement horizontal. */
|
|
1460
|
+
max-width: 100%;
|
|
1461
|
+
overflow-wrap: anywhere;
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
@media (max-width: 767px) {
|
|
1465
|
+
.zv-errpage {
|
|
1466
|
+
min-height: 60vh;
|
|
1467
|
+
padding: 48px 20px;
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
/* --h3 (38px) sur 320px de large coupe « introuvable » en deux. */
|
|
1471
|
+
.zv-errpage__titre {
|
|
1472
|
+
font-size: var(--card-title);
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
.zv-errpage__texte {
|
|
1476
|
+
font-size: var(--body);
|
|
1477
|
+
}
|
|
1478
|
+
|
|
1479
|
+
/* Empilées : côte à côte, deux boutons de 48px ne laissent pas la place
|
|
1480
|
+
* aux libellés et se coupent. */
|
|
1481
|
+
.zv-errpage__actions {
|
|
1482
|
+
flex-direction: column;
|
|
1483
|
+
align-self: stretch;
|
|
1484
|
+
}
|
|
1485
|
+
}
|
package/src/data.css
CHANGED
|
@@ -100,6 +100,50 @@
|
|
|
100
100
|
color: var(--label);
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
+
/* ─── Tableau de PROSE ─────────────────────────────────────────────────
|
|
104
|
+
* .zv-table tronque à l'ellipse, et c'est juste : une ligne de données se
|
|
105
|
+
* balaye du regard, une colonne qui danse en largeur est illisible.
|
|
106
|
+
*
|
|
107
|
+
* Mais tous les tableaux ne portent pas des données. Un contrat en porte qui
|
|
108
|
+
* contiennent des CLAUSES — durées de conservation et leur fondement, sous-
|
|
109
|
+
* traitants et leurs garanties de transfert. Là, tronquer ne « raccourcit »
|
|
110
|
+
* pas : ça CACHE le texte, et cacher une clause dans un document contractuel
|
|
111
|
+
* n'est pas un défaut d'affichage.
|
|
112
|
+
*
|
|
113
|
+
* D'où cette variante, et pas un `className` posé par l'app : le CSS du
|
|
114
|
+
* paquet est hors couche, il bat toute règle layered quelle que soit la
|
|
115
|
+
* spécificité — une app Tailwind qui poserait `whitespace-normal` sur une
|
|
116
|
+
* cellule n'obtiendrait RIEN, en silence. La règle du dépôt est que ce qui
|
|
117
|
+
* doit s'ajuster s'expose en variante ; la voici.
|
|
118
|
+
*
|
|
119
|
+
* (Relevé par la mise en page des documents légaux, 28/08/2026.) */
|
|
120
|
+
|
|
121
|
+
.zv-table--prose .zv-cell {
|
|
122
|
+
overflow: visible;
|
|
123
|
+
text-overflow: clip;
|
|
124
|
+
white-space: normal;
|
|
125
|
+
/* La prose se lit sur plusieurs lignes : il lui faut l'interligne du corps
|
|
126
|
+
* de texte, pas celui d'une cellule d'une ligne. */
|
|
127
|
+
line-height: 1.55;
|
|
128
|
+
/* Un terme long (une référence d'article, une URL de sous-traitant) ne doit
|
|
129
|
+
* pas élargir la colonne au-delà de sa piste. */
|
|
130
|
+
overflow-wrap: anywhere;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Les lignes cessent de centrer : à hauteurs inégales, une cellule d'une
|
|
134
|
+
* ligne flotterait au milieu d'une cellule de quatre. Elles s'alignent en
|
|
135
|
+
* haut, comme des paragraphes côte à côte. */
|
|
136
|
+
.zv-table--prose .zv-row,
|
|
137
|
+
.zv-table--prose .zv-table__head {
|
|
138
|
+
align-items: start;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* Et elles respirent : 10px conviennent à une ligne, pas à un paragraphe. */
|
|
142
|
+
.zv-table--prose .zv-row {
|
|
143
|
+
padding-top: 12px;
|
|
144
|
+
padding-bottom: 12px;
|
|
145
|
+
}
|
|
146
|
+
|
|
103
147
|
/* En-tête d'un tableau posé DANS une carte : la carte porte déjà son filet,
|
|
104
148
|
* un second trait au-dessus ferait doublon. */
|
|
105
149
|
.zv-table__head--inset {
|