@zevra/ui 0.56.0 → 0.57.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/react/forms.tsx CHANGED
@@ -275,13 +275,18 @@ export interface SegGroupProps
275
275
  /** Rangée qui défile au lieu de passer à la ligne. À poser explicitement :
276
276
  * par défaut les puces s'enroulent. */
277
277
  rail?: boolean
278
+ /** Sélecteur SEGMENTÉ : un rail qui contient deux à quatre choix
279
+ * exclusifs, le choix courant posé en relief dessus (« Recherche globale
280
+ * | Recherche textuelle »). Pour un MODE, jamais pour filtrer une
281
+ * collection : là, ce sont les puces. Une seule rangée, sans compte. */
282
+ segmente?: boolean
278
283
  className?: string
279
284
  }
280
285
 
281
- export function SegGroup({ rail, className, ...reste }: SegGroupProps) {
286
+ export function SegGroup({ rail, segmente, className, ...reste }: SegGroupProps) {
282
287
  return (
283
288
  <div
284
- className={cx('zv-seg-group', rail && 'zv-seg-group--rail', className)}
289
+ className={cx('zv-seg-group', rail && 'zv-seg-group--rail', segmente && 'zv-seg-group--segmente', className)}
285
290
  {...reste}
286
291
  />
287
292
  )
package/src/forms.css CHANGED
@@ -840,6 +840,50 @@
840
840
  overflow-x: auto;
841
841
  }
842
842
 
843
+ /* Sélecteur SEGMENTÉ (DECISIONS, 12/11/2026, 0.57.0). HORS RELEVÉ : aucune
844
+ * planche ne le porte. Demandé par Tésope pour la palette de recherche
845
+ * (« Recherche globale | Recherche textuelle »), sur le modèle du sélecteur
846
+ * « Conversation | Cowork » de Claude : UN rail qui contient les choix, le
847
+ * choix courant posé en RELIEF dessus. Un mode, pas un filtre : la puce
848
+ * reste le seul mécanisme de filtrage.
849
+ * Dérivé : le rail est un aplat de --hairline cerné de --line (la surface
850
+ * en retrait du système), le choix courant le papier blanc et l'ombre de
851
+ * carte (ce qui est posé dessus). Le choix courant reste à l'ENCRE et non à
852
+ * l'accent : le relief dit déjà l'état, un second signal ferait un bouton
853
+ * plein de plus. Les rayons suivent --r-btn, donc `zv-arrondi`. */
854
+ .zv-seg-group--segmente {
855
+ display: inline-flex;
856
+ flex-wrap: nowrap;
857
+ gap: 0;
858
+ border: 1px solid var(--line);
859
+ border-radius: var(--r-btn);
860
+ background: var(--hairline);
861
+ }
862
+
863
+ /* Bord à bord : le rail n'a pas de marge intérieure, et chaque choix
864
+ * déborde d'un pixel sur son filet. Le choix courant occupe donc toute la
865
+ * hauteur du rail et son filet se pose EXACTEMENT sur celui du rail, sans
866
+ * couture ni double trait (demande de Joachim, 12/11/2026 : un écart entre
867
+ * le bord et la pastille la faisait flotter). */
868
+ .zv-seg-group--segmente > .zv-seg {
869
+ margin: -1px;
870
+ border-color: transparent;
871
+ background: transparent;
872
+ color: var(--ink-2);
873
+ }
874
+
875
+ .zv-seg-group--segmente > .zv-seg:hover {
876
+ color: var(--ink);
877
+ }
878
+
879
+ .zv-seg-group--segmente > .zv-seg--on,
880
+ .zv-seg-group--segmente > .zv-seg[aria-pressed="true"] {
881
+ border-color: var(--line);
882
+ background: var(--white);
883
+ box-shadow: var(--shadow-card);
884
+ color: var(--ink);
885
+ }
886
+
843
887
  .zv-seg {
844
888
  border: 1px solid var(--line);
845
889
  border-radius: var(--r-btn);