@zevra/ui 0.4.0 → 0.6.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.
Files changed (86) hide show
  1. package/DECISIONS.md +24 -0
  2. package/README.md +64 -1
  3. package/demo/index.html +33 -0
  4. package/dist/actions.d.ts +41 -0
  5. package/dist/actions.d.ts.map +1 -0
  6. package/dist/actions.js +24 -0
  7. package/dist/actions.js.map +1 -0
  8. package/dist/catalogue.d.ts +30 -0
  9. package/dist/catalogue.d.ts.map +1 -0
  10. package/dist/catalogue.js +881 -0
  11. package/dist/catalogue.js.map +1 -0
  12. package/dist/content.d.ts +186 -0
  13. package/dist/content.d.ts.map +1 -0
  14. package/dist/content.js +122 -0
  15. package/dist/content.js.map +1 -0
  16. package/dist/css-inline.d.ts +11 -0
  17. package/dist/css-inline.d.ts.map +1 -0
  18. package/dist/css-inline.js +13 -0
  19. package/dist/css-inline.js.map +1 -0
  20. package/dist/cx.d.ts +16 -0
  21. package/dist/cx.d.ts.map +1 -0
  22. package/dist/cx.js +20 -0
  23. package/dist/cx.js.map +1 -0
  24. package/dist/data.d.ts +136 -0
  25. package/dist/data.d.ts.map +1 -0
  26. package/dist/data.js +98 -0
  27. package/dist/data.js.map +1 -0
  28. package/dist/feedback.d.ts +88 -0
  29. package/dist/feedback.d.ts.map +1 -0
  30. package/dist/feedback.js +38 -0
  31. package/dist/feedback.js.map +1 -0
  32. package/dist/forms.d.ts +120 -0
  33. package/dist/forms.d.ts.map +1 -0
  34. package/dist/forms.js +60 -0
  35. package/dist/forms.js.map +1 -0
  36. package/dist/icon-data.d.ts +6 -0
  37. package/dist/icon-data.d.ts.map +1 -0
  38. package/dist/icon-data.js +77 -0
  39. package/dist/icon-data.js.map +1 -0
  40. package/dist/icon.d.ts +33 -0
  41. package/dist/icon.d.ts.map +1 -0
  42. package/dist/icon.js +13 -0
  43. package/dist/icon.js.map +1 -0
  44. package/dist/index.d.ts +13 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +41 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/layout.d.ts +167 -0
  49. package/dist/layout.d.ts.map +1 -0
  50. package/dist/layout.js +121 -0
  51. package/dist/layout.js.map +1 -0
  52. package/dist/navigation.d.ts +150 -0
  53. package/dist/navigation.d.ts.map +1 -0
  54. package/dist/navigation.js +104 -0
  55. package/dist/navigation.js.map +1 -0
  56. package/dist/overlays.d.ts +68 -0
  57. package/dist/overlays.d.ts.map +1 -0
  58. package/dist/overlays.js +114 -0
  59. package/dist/overlays.js.map +1 -0
  60. package/dist/surfaces.d.ts +61 -0
  61. package/dist/surfaces.d.ts.map +1 -0
  62. package/dist/surfaces.js +54 -0
  63. package/dist/surfaces.js.map +1 -0
  64. package/dist/typography.d.ts +89 -0
  65. package/dist/typography.d.ts.map +1 -0
  66. package/dist/typography.js +76 -0
  67. package/dist/typography.js.map +1 -0
  68. package/package.json +36 -4
  69. package/react/actions.tsx +138 -0
  70. package/react/catalogue.tsx +1752 -0
  71. package/react/content.tsx +417 -0
  72. package/react/css-inline.ts +14 -0
  73. package/react/cx.ts +20 -0
  74. package/react/data.tsx +300 -0
  75. package/react/feedback.tsx +229 -0
  76. package/react/forms.tsx +383 -0
  77. package/react/icon-data.ts +114 -0
  78. package/react/icon.tsx +84 -0
  79. package/react/index.ts +42 -0
  80. package/react/layout.tsx +348 -0
  81. package/react/navigation.tsx +329 -0
  82. package/react/overlays.tsx +237 -0
  83. package/react/surfaces.tsx +161 -0
  84. package/react/typography.tsx +220 -0
  85. package/src/components.css +201 -0
  86. package/src/layout.css +4 -0
@@ -524,8 +524,182 @@
524
524
  background: var(--spectre);
525
525
  }
526
526
 
527
+
528
+ /* ─── Blocs éditoriaux ──────────────────────────────────────────────────
529
+ * HORS RELEVÉ — ajoutés le 24/08/2026 à la demande de la DA (règle de
530
+ * variété : jamais deux blocs de même forme qui se suivent, 80 % de formes
531
+ * différentes par page). Quatre façons de poser du contenu SANS carte,
532
+ * pour que les grilles de cartes redeviennent un choix et non un réflexe.
533
+ * Dessinés dans les tokens existants, rien de nouveau dans la palette. */
534
+
535
+ /* Rangées à filets : un libellé fort, un contenu, un trait fin entre
536
+ * chaque rangée. Pour les listes où l'alignement fait la lecture
537
+ * (profils rencontrés, prestations, caractéristiques). */
538
+ .zv-rows {
539
+ display: flex;
540
+ flex-direction: column;
541
+ }
542
+
543
+ .zv-rows__row {
544
+ display: flex;
545
+ gap: 24px;
546
+ align-items: baseline;
547
+ flex-wrap: wrap;
548
+ padding: 18px 0;
549
+ border-top: 1px solid var(--line);
550
+ }
551
+
552
+ .zv-rows__row:first-child {
553
+ border-top: none;
554
+ }
555
+
556
+ .zv-rows__key {
557
+ font-weight: 600;
558
+ flex: 0 0 280px;
559
+ }
560
+
561
+ .zv-rows__val {
562
+ flex: 1;
563
+ min-width: 260px;
564
+ /* C'est le corps de texte du paquet — le token, pas sa valeur recopiée. */
565
+ font-size: var(--body);
566
+ line-height: 1.6;
567
+ color: var(--muted);
568
+ }
569
+
570
+ /* Sommaire numéroté : le numéro en display léger, le contenu à droite,
571
+ * un filet entre les entrées. Pour les suites longues qui étoufferaient
572
+ * en cartes (offres détaillées, programmes). */
573
+ .zv-index {
574
+ display: flex;
575
+ flex-direction: column;
576
+ }
577
+
578
+ .zv-index__item {
579
+ display: flex;
580
+ gap: 28px;
581
+ align-items: flex-start;
582
+ padding: 28px 0;
583
+ border-top: 1px solid var(--line);
584
+ }
585
+
586
+ .zv-index__item:first-child {
587
+ border-top: none;
588
+ padding-top: 0;
589
+ }
590
+
591
+ .zv-index__num {
592
+ font-family: var(--font-display);
593
+ font-weight: 300;
594
+ font-size: 40px;
595
+ line-height: 1;
596
+ letter-spacing: -0.02em;
597
+ color: var(--accent-deep);
598
+ flex: 0 0 64px;
599
+ }
600
+
601
+ .zv-index__body {
602
+ flex: 1;
603
+ min-width: 0;
604
+ }
605
+
606
+ /* Variante en colonnes : les mêmes entrées numérotées, posées en grille
607
+ * de trois, sans filets — l'espace fait la séparation. */
608
+ .zv-index--cols {
609
+ display: grid;
610
+ grid-template-columns: repeat(3, minmax(0, 1fr));
611
+ gap: 40px 32px;
612
+ }
613
+
614
+ .zv-index--cols .zv-index__item {
615
+ flex-direction: column;
616
+ gap: 10px;
617
+ padding: 0;
618
+ border-top: none;
619
+ }
620
+
621
+ .zv-index--cols .zv-index__num {
622
+ flex: none;
623
+ font-size: 32px;
624
+ color: var(--accent-line);
625
+ }
626
+
627
+ /* Déroulé vertical : le rail et ses points, à la verticale. La déclinaison
628
+ * verticale de zv-steps, pour les méthodes qui se lisent comme un récit.
629
+ * Les points reprennent les couleurs des points de méthode (l'un des
630
+ * trois emplois autorisés du spectre). */
631
+ .zv-flow {
632
+ position: relative;
633
+ display: flex;
634
+ flex-direction: column;
635
+ gap: 36px;
636
+ padding-left: 32px;
637
+ }
638
+
639
+ .zv-flow::before {
640
+ content: '';
641
+ position: absolute;
642
+ left: 5px;
643
+ top: 8px;
644
+ bottom: 8px;
645
+ width: 2px;
646
+ background: var(--line);
647
+ }
648
+
649
+ .zv-flow__step {
650
+ position: relative;
651
+ --zv-flow-dot: var(--iris);
652
+ }
653
+
654
+ .zv-flow__step::before {
655
+ content: '';
656
+ position: absolute;
657
+ left: -32px;
658
+ top: 5px;
659
+ width: 12px;
660
+ height: 12px;
661
+ border-radius: 50%;
662
+ background: var(--zv-flow-dot);
663
+ box-shadow:
664
+ 0 0 0 4px var(--paper),
665
+ 0 0 0 5px var(--accent-line);
666
+ }
667
+
668
+ .zv-flow__step--violet {
669
+ --zv-flow-dot: var(--violet);
670
+ }
671
+
672
+ .zv-flow__step--cyan {
673
+ --zv-flow-dot: var(--cyan);
674
+ }
675
+
676
+ /* Encart d'appel : une bande claire sur fond indigo dilué, un titre, une
677
+ * action. Pour l'offre transverse qui doit se voir sans crier
678
+ * (remise Campus, renvoi vers une autre page). */
679
+ .zv-callout {
680
+ display: flex;
681
+ align-items: center;
682
+ justify-content: space-between;
683
+ gap: 24px;
684
+ flex-wrap: wrap;
685
+ background: var(--accent-soft);
686
+ border: 1px solid var(--accent-line);
687
+ border-radius: var(--r-card);
688
+ padding: 32px 36px;
689
+ }
690
+
691
+ .zv-callout__title {
692
+ margin: 0;
693
+ font-family: var(--font-display);
694
+ font-weight: 300;
695
+ letter-spacing: -0.01em;
696
+ font-size: 26px;
697
+ line-height: 1.2;
698
+ }
699
+
527
700
  /* ─── Mobile ────────────────────────────────────────────────────────────*/
528
701
 
702
+
529
703
  @media (max-width: 767px) {
530
704
  .zv-btn--sm {
531
705
  height: 36px;
@@ -549,4 +723,31 @@
549
723
  .zv-inset {
550
724
  max-width: none;
551
725
  }
726
+
727
+ .zv-rows__key {
728
+ flex-basis: 100%;
729
+ }
730
+
731
+ .zv-index__item {
732
+ gap: 18px;
733
+ padding: 22px 0;
734
+ }
735
+
736
+ .zv-index__num {
737
+ flex-basis: 44px;
738
+ font-size: 30px;
739
+ }
740
+
741
+ .zv-index--cols {
742
+ grid-template-columns: minmax(0, 1fr);
743
+ gap: 28px;
744
+ }
745
+
746
+ .zv-callout {
747
+ padding: 24px 22px;
748
+ }
749
+
750
+ .zv-callout__title {
751
+ font-size: 21px;
752
+ }
552
753
  }
package/src/layout.css CHANGED
@@ -61,7 +61,9 @@
61
61
 
62
62
  .zv-col-3 { grid-column: span 3; }
63
63
  .zv-col-4 { grid-column: span 4; }
64
+ .zv-col-5 { grid-column: span 5; }
64
65
  .zv-col-6 { grid-column: span 6; }
66
+ .zv-col-7 { grid-column: span 7; }
65
67
  .zv-col-8 { grid-column: span 8; }
66
68
  .zv-col-9 { grid-column: span 9; }
67
69
 
@@ -520,7 +522,9 @@
520
522
 
521
523
  .zv-col-3,
522
524
  .zv-col-4,
525
+ .zv-col-5,
523
526
  .zv-col-6,
527
+ .zv-col-7,
524
528
  .zv-col-8,
525
529
  .zv-col-9,
526
530
  .zv-section-head__main,