@zevra/ui 0.15.0 → 0.15.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 +14 -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 +1 -1
- package/react/css-inline.ts +1 -1
- package/src/layout.css +0 -82
- package/src/navigation.css +89 -0
package/src/layout.css
CHANGED
|
@@ -313,88 +313,6 @@
|
|
|
313
313
|
color: var(--label);
|
|
314
314
|
}
|
|
315
315
|
|
|
316
|
-
/* ─── Entrées à menu déroulant ──────────────────────────────────────────
|
|
317
|
-
*
|
|
318
|
-
* Une nav de vitrine qui porte l'architecture d'un site — des familles,
|
|
319
|
-
* pas quatre liens — a besoin de déplier. Ouverture au survol ET au focus
|
|
320
|
-
* (`:focus-within`) : en CSS seul, donc accessible au clavier sans une
|
|
321
|
-
* ligne de JavaScript et sans état à tenir.
|
|
322
|
-
*
|
|
323
|
-
* Le panneau est le .zv-menu du paquet, simplement ancré sous l'entrée. */
|
|
324
|
-
|
|
325
|
-
.zv-navdd {
|
|
326
|
-
position: relative;
|
|
327
|
-
display: inline-flex;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
/* Le bouton porte .zv-navlink : il doit se rendre EXACTEMENT comme un lien
|
|
331
|
-
* simple de la barre. Piège à éviter — un `font: inherit`, réflexe habituel
|
|
332
|
-
* pour dénuder un bouton, remet la fonte du CONTENEUR (16px/400) là où
|
|
333
|
-
* .zv-navlink pose 14px/500 : les entrées à menu deviennent plus grosses
|
|
334
|
-
* que les autres. On ne reprend donc du bouton que ce qui doit disparaître. */
|
|
335
|
-
.zv-navdd__btn {
|
|
336
|
-
display: inline-flex;
|
|
337
|
-
align-items: center;
|
|
338
|
-
gap: 5px;
|
|
339
|
-
padding: 0;
|
|
340
|
-
border: 0;
|
|
341
|
-
background: none;
|
|
342
|
-
cursor: pointer;
|
|
343
|
-
font-family: inherit;
|
|
344
|
-
line-height: inherit;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
.zv-navdd__chevron {
|
|
348
|
-
width: 12px;
|
|
349
|
-
height: 12px;
|
|
350
|
-
fill: none;
|
|
351
|
-
stroke: currentColor;
|
|
352
|
-
stroke-width: 2;
|
|
353
|
-
/* Bouts francs : le trait carré du jeu d'icônes (25/08/2026). */
|
|
354
|
-
stroke-linecap: square;
|
|
355
|
-
stroke-linejoin: miter;
|
|
356
|
-
transition: transform 160ms var(--zv-easing, cubic-bezier(0.2, 0.7, 0.2, 1));
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
.zv-navdd:hover .zv-navdd__chevron,
|
|
360
|
-
.zv-navdd:focus-within .zv-navdd__chevron {
|
|
361
|
-
transform: rotate(180deg);
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
/* Le pont invisible (::before) couvre l'interstice entre l'entrée et son
|
|
365
|
-
* panneau : sans lui, le survol se rompt en descendant vers le menu et le
|
|
366
|
-
* menu se referme sous le curseur. */
|
|
367
|
-
.zv-navdd__menu {
|
|
368
|
-
position: absolute;
|
|
369
|
-
top: 100%;
|
|
370
|
-
left: 50%;
|
|
371
|
-
translate: -50% 0;
|
|
372
|
-
padding-top: 14px;
|
|
373
|
-
display: none;
|
|
374
|
-
min-width: 250px;
|
|
375
|
-
z-index: 50;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
.zv-navdd__menu::before {
|
|
379
|
-
content: '';
|
|
380
|
-
position: absolute;
|
|
381
|
-
inset: 0 0 auto 0;
|
|
382
|
-
height: 14px;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
.zv-navdd:hover .zv-navdd__menu,
|
|
386
|
-
.zv-navdd:focus-within .zv-navdd__menu {
|
|
387
|
-
display: flex;
|
|
388
|
-
flex-direction: column;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
.zv-navdd__sep {
|
|
392
|
-
display: block;
|
|
393
|
-
height: 1px;
|
|
394
|
-
margin: 6px 0;
|
|
395
|
-
background: var(--hairline);
|
|
396
|
-
}
|
|
397
|
-
|
|
398
316
|
/* ─── Sélecteur de langue ───────────────────────────────────────────────
|
|
399
317
|
* Des initiales au registre mono, pas un menu : trois langues se lisent
|
|
400
318
|
* d'un coup d'œil, et un menu pour trois entrées coûte un clic pour rien.
|
package/src/navigation.css
CHANGED
|
@@ -496,6 +496,95 @@
|
|
|
496
496
|
* clic extérieur, fermeture à Échap. Le CSS ci-dessus est prêt à les recevoir
|
|
497
497
|
* (aria-selected, :focus-visible) ; le composant doit les écrire. */
|
|
498
498
|
|
|
499
|
+
/* ─── Entrées à menu déroulant de la barre vitrine ──────────────────────
|
|
500
|
+
*
|
|
501
|
+
* ⚠️ CE BLOC DOIT RESTER APRÈS `.zv-menu`, et donc dans CE fichier. Le
|
|
502
|
+
* panneau d'une entrée porte les deux classes ; `.zv-navdd__menu` reprend à
|
|
503
|
+
* `.zv-menu` son display, sa position et son ancrage, à spécificité égale —
|
|
504
|
+
* c'est l'ORDRE qui tranche. Posé dans layout.css, qu'index.css importe
|
|
505
|
+
* AVANT navigation.css, il perdait : les trois menus d'une barre
|
|
506
|
+
* s'affichaient en même temps, ouverts en permanence.
|
|
507
|
+
*
|
|
508
|
+
* Une nav de vitrine qui porte l'architecture d'un site — des familles,
|
|
509
|
+
* pas quatre liens — a besoin de déplier. Ouverture au survol ET au focus
|
|
510
|
+
* (`:focus-within`) : en CSS seul, donc accessible au clavier sans une
|
|
511
|
+
* ligne de JavaScript et sans état à tenir.
|
|
512
|
+
*
|
|
513
|
+
* Le panneau est le .zv-menu du paquet, simplement ancré sous l'entrée. */
|
|
514
|
+
|
|
515
|
+
.zv-navdd {
|
|
516
|
+
position: relative;
|
|
517
|
+
display: inline-flex;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
/* Le bouton porte .zv-navlink : il doit se rendre EXACTEMENT comme un lien
|
|
521
|
+
* simple de la barre. Piège à éviter — un `font: inherit`, réflexe habituel
|
|
522
|
+
* pour dénuder un bouton, remet la fonte du CONTENEUR (16px/400) là où
|
|
523
|
+
* .zv-navlink pose 14px/500 : les entrées à menu deviennent plus grosses
|
|
524
|
+
* que les autres. On ne reprend donc du bouton que ce qui doit disparaître. */
|
|
525
|
+
.zv-navdd__btn {
|
|
526
|
+
display: inline-flex;
|
|
527
|
+
align-items: center;
|
|
528
|
+
gap: 5px;
|
|
529
|
+
padding: 0;
|
|
530
|
+
border: 0;
|
|
531
|
+
background: none;
|
|
532
|
+
cursor: pointer;
|
|
533
|
+
font-family: inherit;
|
|
534
|
+
line-height: inherit;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
.zv-navdd__chevron {
|
|
538
|
+
width: 12px;
|
|
539
|
+
height: 12px;
|
|
540
|
+
fill: none;
|
|
541
|
+
stroke: currentColor;
|
|
542
|
+
stroke-width: 2;
|
|
543
|
+
/* Bouts francs : le trait carré du jeu d'icônes (25/08/2026). */
|
|
544
|
+
stroke-linecap: square;
|
|
545
|
+
stroke-linejoin: miter;
|
|
546
|
+
transition: transform 160ms var(--zv-easing, cubic-bezier(0.2, 0.7, 0.2, 1));
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
.zv-navdd:hover .zv-navdd__chevron,
|
|
550
|
+
.zv-navdd:focus-within .zv-navdd__chevron {
|
|
551
|
+
transform: rotate(180deg);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
/* Le pont invisible (::before) couvre l'interstice entre l'entrée et son
|
|
555
|
+
* panneau : sans lui, le survol se rompt en descendant vers le menu et le
|
|
556
|
+
* menu se referme sous le curseur. */
|
|
557
|
+
.zv-navdd__menu {
|
|
558
|
+
position: absolute;
|
|
559
|
+
top: 100%;
|
|
560
|
+
left: 50%;
|
|
561
|
+
translate: -50% 0;
|
|
562
|
+
padding-top: 14px;
|
|
563
|
+
display: none;
|
|
564
|
+
min-width: 250px;
|
|
565
|
+
z-index: 50;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
.zv-navdd__menu::before {
|
|
569
|
+
content: '';
|
|
570
|
+
position: absolute;
|
|
571
|
+
inset: 0 0 auto 0;
|
|
572
|
+
height: 14px;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
.zv-navdd:hover .zv-navdd__menu,
|
|
576
|
+
.zv-navdd:focus-within .zv-navdd__menu {
|
|
577
|
+
display: flex;
|
|
578
|
+
flex-direction: column;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
.zv-navdd__sep {
|
|
582
|
+
display: block;
|
|
583
|
+
height: 1px;
|
|
584
|
+
margin: 6px 0;
|
|
585
|
+
background: var(--hairline);
|
|
586
|
+
}
|
|
587
|
+
|
|
499
588
|
/* ─── Popover ───────────────────────────────────────────────────────────
|
|
500
589
|
* HORS RELEVÉ (25/08/2026, voir DECISIONS.md). Le menu impose ses items ;
|
|
501
590
|
* il n'existait aucune surface ancrée LIBRE — aide contextuelle,
|