@zevra/ui 0.55.2 → 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/DECISIONS.md +36 -0
- package/dist/catalogue.d.ts.map +1 -1
- package/dist/catalogue.js +22 -0
- package/dist/catalogue.js.map +1 -1
- 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/dist/forms.d.ts +6 -1
- package/dist/forms.d.ts.map +1 -1
- package/dist/forms.js +2 -2
- package/dist/forms.js.map +1 -1
- package/dist/icon.d.ts +7 -1
- package/dist/icon.d.ts.map +1 -1
- package/dist/icon.js +2 -2
- package/dist/icon.js.map +1 -1
- package/package.json +1 -1
- package/react/catalogue.tsx +35 -0
- package/react/css-inline.ts +1 -1
- package/react/forms.tsx +7 -2
- package/react/icon.tsx +8 -2
- package/src/forms.css +44 -0
- package/src/icons.css +17 -0
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/react/icon.tsx
CHANGED
|
@@ -99,15 +99,21 @@ export interface IconTileProps
|
|
|
99
99
|
/** Titre accessible. Sans lui la tuile est DÉCORATIVE, le bon défaut :
|
|
100
100
|
* elle accompagne un libellé qui la nomme déjà. */
|
|
101
101
|
titre?: string
|
|
102
|
+
/**
|
|
103
|
+
* Tuile d'un MODULE parmi des tuiles de marque (Marketplace) : papier blanc
|
|
104
|
+
* sans filet, icône à l'encre accent à la taille d'un logo. Hors d'une
|
|
105
|
+
* grille de marques, garder la tuile indigo pâle par défaut.
|
|
106
|
+
*/
|
|
107
|
+
module?: boolean
|
|
102
108
|
className?: string
|
|
103
109
|
}
|
|
104
110
|
|
|
105
111
|
/** La pastille carrée qui porte une icône devant un argument de la vitrine
|
|
106
112
|
* (liste de garanties, grille d'atouts). UNE par argument, jamais en décor
|
|
107
113
|
* isolé : une tuile sans libellé voisin est un rébus. */
|
|
108
|
-
export function IconTile({ nom, titre, className, ...reste }: IconTileProps) {
|
|
114
|
+
export function IconTile({ nom, titre, module, className, ...reste }: IconTileProps) {
|
|
109
115
|
return (
|
|
110
|
-
<span className={cx('zv-icon-tile', className)} {...reste}>
|
|
116
|
+
<span className={cx('zv-icon-tile', module && 'zv-icon-tile--module', className)} {...reste}>
|
|
111
117
|
<Icon nom={nom} titre={titre} />
|
|
112
118
|
</span>
|
|
113
119
|
)
|
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);
|
package/src/icons.css
CHANGED
|
@@ -162,6 +162,23 @@
|
|
|
162
162
|
object-fit: contain;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
+
/* La tuile d'un MODULE (DECISIONS, « La tuile de module », 09/11/2026).
|
|
166
|
+
* HORS RELEVÉ. Dans une grille de marques (la Marketplace de Tésope), un
|
|
167
|
+
* module maison n'a pas de logo : la tuile d'icône indigo pâle y rompait
|
|
168
|
+
* l'alignement des tuiles blanches. Même papier blanc sans filet que la tuile
|
|
169
|
+
* de service, l'icône tracée à l'encre accent, à 60 % comme un logo : la
|
|
170
|
+
* grille reste homogène, et rien n'imite une marque. */
|
|
171
|
+
.zv-icon-tile--module {
|
|
172
|
+
border-color: transparent;
|
|
173
|
+
background: var(--white);
|
|
174
|
+
color: var(--accent);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.zv-icon-tile--module .zv-icon {
|
|
178
|
+
width: 60%;
|
|
179
|
+
height: 60%;
|
|
180
|
+
}
|
|
181
|
+
|
|
165
182
|
/* À fond plein, la marque couvre toute la tuile : pas de papier blanc
|
|
166
183
|
* dessous, qui pointerait aux coins sous l'option arrondie. */
|
|
167
184
|
.zv-icon-tile--logo-plein {
|