@zevra/ui 0.11.0 → 0.12.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 +28 -0
- package/README.md +10 -3
- package/demo/index.html +1 -0
- 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/package.json +4 -2
- package/react/css-inline.ts +1 -1
- package/src/motion.css +184 -105
- package/src/motion.js +53 -0
- package/src/surfaces.css +9 -0
package/DECISIONS.md
CHANGED
|
@@ -588,3 +588,31 @@ jamais les deux.
|
|
|
588
588
|
feedback.css refuse explicitement icône et illustration dans l'écran
|
|
589
589
|
d'absence (« exactement les trois ajouts qu'un état vide attire »). Ce
|
|
590
590
|
refus est argumenté et écrit : il tient, la fournée ne le rouvre pas.
|
|
591
|
+
|
|
592
|
+
## Les entrées ne se rejouent pas (26/08/2026, 0.12.0)
|
|
593
|
+
|
|
594
|
+
Constat d'usage sur le site vitrine : les entrées pilotées par
|
|
595
|
+
`animation-timeline: view()` rejouaient À L'ENVERS dès que le lecteur
|
|
596
|
+
remontait — les vidéos, les cartes d'articles, les grilles entières
|
|
597
|
+
disparaissaient sous ses yeux, y compris en pleine lecture d'un article. Et
|
|
598
|
+
une grille haute, jamais « contenue » dans le viewport, n'atteignait jamais
|
|
599
|
+
son état posé : la section paraissait vide.
|
|
600
|
+
|
|
601
|
+
Arbitrage : **une révélation par visite**. Les sept entrées deviennent des
|
|
602
|
+
animations temporelles courtes, armées par `html.zv-motion` (posé par
|
|
603
|
+
`motion.js`, importable en `@zevra/ui/motion.js`) et libérées par `.zv-in`
|
|
604
|
+
à l'entrée au viewport — une fois, puis plus jamais. Sans JavaScript, rien
|
|
605
|
+
n'est armé : la page s'affiche complète, même dégradation douce qu'avant.
|
|
606
|
+
Les @keyframes remontent au niveau racine pour qu'un échafaudage de scènes
|
|
607
|
+
(l'expérience épinglée d'une home) puisse les re-brancher sur ses timelines
|
|
608
|
+
nommées : il pose `data-zv-motion-skip` sur ses scènes et motion.js n'y
|
|
609
|
+
touche pas.
|
|
610
|
+
|
|
611
|
+
Ce qui RESTE scroll-piloté, et doit le rester : la barre de progression
|
|
612
|
+
(`zv-anim-progress`) et le point d'étape (`zv-anim-dot-active`) — suivre la
|
|
613
|
+
position de lecture est leur raison d'être, avancer et reculer avec elle
|
|
614
|
+
est leur contrat.
|
|
615
|
+
|
|
616
|
+
Corrigé du même mouvement : dans `.zv-band`, l'emphase `strong` de
|
|
617
|
+
zv-body/zv-lead posait l'encre (--ink) sur le navy — invisible. Elle hérite
|
|
618
|
+
désormais de la couleur ambiante, la graisse seule la distingue.
|
package/README.md
CHANGED
|
@@ -150,9 +150,16 @@ Les règles de la passation : une seule courbe, un seul type de mouvement par
|
|
|
150
150
|
scène, des entrées toujours vers le haut, et **aucun mouvement sur la
|
|
151
151
|
typographie une fois posée**.
|
|
152
152
|
|
|
153
|
-
Les entrées
|
|
154
|
-
`
|
|
155
|
-
|
|
153
|
+
Les entrées se jouent **une fois par visite** (0.12.0) : elles sont armées
|
|
154
|
+
par `html.zv-motion` et libérées à l'entrée au viewport par `motion.js` —
|
|
155
|
+
`import '@zevra/ui/motion.js'` une fois par page, et rien d'autre à faire.
|
|
156
|
+
Remonter la page ne défait rien : l'ancien pilotage `view()` rejouait les
|
|
157
|
+
entrées à l'envers sous le lecteur. Sans JavaScript, rien n'est armé et la
|
|
158
|
+
page s'affiche complète. Un échafaudage de scènes scroll-pilotées pose
|
|
159
|
+
`data-zv-motion-skip` sur ses scènes et re-branche les @keyframes sur ses
|
|
160
|
+
timelines nommées. Seuls `zv-anim-progress` et `zv-anim-dot-active` restent
|
|
161
|
+
au défilement — suivre la lecture est leur métier. Un seul media query
|
|
162
|
+
neutralise les neuf pour `prefers-reduced-motion`.
|
|
156
163
|
|
|
157
164
|
### Les tokens en JavaScript
|
|
158
165
|
|
package/demo/index.html
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
8
8
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Outfit:wght@200;300;400;500;600&family=Public+Sans:wght@400;600&family=Space+Grotesk:wght@500;600;700&display=swap">
|
|
9
9
|
<link rel="stylesheet" href="../src/index.css">
|
|
10
|
+
<script src="../src/motion.js" defer></script>
|
|
10
11
|
<style>
|
|
11
12
|
/* Propre à la planche : elle n'appartient pas au système. */
|
|
12
13
|
.demo-sec { padding-top: 72px; }
|
package/dist/css-inline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css-inline.d.ts","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAGA;;;iEAGiE;AACjE,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"css-inline.d.ts","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAGA;;;iEAGiE;AACjE,eAAO,MAAM,WAAW,EAAE,MAAghnO,CAAA;AAE1inO;;;yBAGyB;AACzB,eAAO,MAAM,WAAW,EAAE,MAAm4B,CAAA"}
|