@zevra/ui 0.29.0 → 0.29.1
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 +24 -0
- package/package.json +1 -1
- package/src/rail.js +15 -3
package/DECISIONS.md
CHANGED
|
@@ -1403,3 +1403,27 @@ Le jour où la suite dépasse la douzaine, c'est une autre conversation.
|
|
|
1403
1403
|
Ce qui n'a **pas** été repris de la maquette : les angles arrondis des
|
|
1404
1404
|
tuiles. La suite est passée à l'angle vif le 25/08, partout, et un panneau
|
|
1405
1405
|
d'applications n'est pas une exception.
|
|
1406
|
+
|
|
1407
|
+
## Le drapeau qui se prenait pour un composant (28/08/2026, 0.29.1)
|
|
1408
|
+
|
|
1409
|
+
`rail.js` marquait « déjà armé » en posant `data-zv-rail` sur `<html>` —
|
|
1410
|
+
le nom même de l'attribut qui DÉSIGNE un rail. Son propre sélecteur,
|
|
1411
|
+
`[data-zv-rail]`, ramassait donc `<html>` : **la page entière devenait un
|
|
1412
|
+
rail**.
|
|
1413
|
+
|
|
1414
|
+
Sur une page qui a un vrai rail, cela ne se voyait pas. Sur une page qui
|
|
1415
|
+
n'en a pas — la seule où ça compte — `a[href^="#"]` ramassait tous les
|
|
1416
|
+
liens d'ancre, boutons compris, et le premier recevait
|
|
1417
|
+
`.zv-rail__item--on`. Or cette classe pose `color: var(--accent-deep)` :
|
|
1418
|
+
un appel à l'action indigo sur fond indigo, illisible.
|
|
1419
|
+
|
|
1420
|
+
Constaté sur `/bootcamp` : « Candidater pour octobre » était le premier
|
|
1421
|
+
lien d'ancre de la page.
|
|
1422
|
+
|
|
1423
|
+
Le drapeau s'appelle désormais `data-zv-rail-arme`, et `rails()` écarte
|
|
1424
|
+
explicitement `<html>` et `<body>` — ceinture et bretelles, parce qu'un
|
|
1425
|
+
consommateur peut écrire ce qu'il veut sur la racine.
|
|
1426
|
+
|
|
1427
|
+
Un test garde la classe entière de fautes : dans tout module livré, aucun
|
|
1428
|
+
drapeau posé sur `documentElement.dataset` ne peut porter le nom d'un
|
|
1429
|
+
attribut que le même module utilise comme sélecteur.
|
package/package.json
CHANGED
package/src/rail.js
CHANGED
|
@@ -27,14 +27,26 @@
|
|
|
27
27
|
*/
|
|
28
28
|
(() => {
|
|
29
29
|
if (typeof document === 'undefined') return
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
/* ⚠️ Le drapeau d'armement ne doit JAMAIS reprendre le nom de l'attribut
|
|
31
|
+
* qui désigne un rail. Il s'appelait `data-zv-rail`, comme le composant :
|
|
32
|
+
* posé sur <html>, il faisait de la PAGE ENTIÈRE un rail. Sur une page
|
|
33
|
+
* sans rail — la seule où ça se voit —, `a[href^="#"]` ramassait alors
|
|
34
|
+
* tous les liens d'ancre, boutons compris, et le premier d'entre eux
|
|
35
|
+
* recevait `.zv-rail__item--on` : un appel à l'action en indigo sur fond
|
|
36
|
+
* indigo, illisible. Constaté sur /bootcamp. */
|
|
37
|
+
if (document.documentElement.dataset.zvRailArme === 'on') return
|
|
38
|
+
document.documentElement.dataset.zvRailArme = 'on'
|
|
32
39
|
|
|
33
40
|
/** Hauteur de la ligne de lecture, en fraction du viewport. 45 % : un peu
|
|
34
41
|
* au-dessus du milieu, là où l'œil se pose vraiment. */
|
|
35
42
|
const LIGNE = 0.45
|
|
36
43
|
|
|
37
|
-
|
|
44
|
+
/* Ceinture et bretelles : <html> et <body> ne sont jamais des rails, quoi
|
|
45
|
+
* qu'un consommateur écrive dessus. */
|
|
46
|
+
const rails = () =>
|
|
47
|
+
Array.from(document.querySelectorAll('[data-zv-rail]')).filter(
|
|
48
|
+
(el) => el !== document.documentElement && el !== document.body,
|
|
49
|
+
)
|
|
38
50
|
|
|
39
51
|
const suivre = (rail) => {
|
|
40
52
|
const entrees = Array.from(rail.querySelectorAll('a[href^="#"]'))
|