@zevra/ui 0.50.0 → 0.51.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 CHANGED
@@ -2242,3 +2242,86 @@ petit, qui ne ressemblait à aucune icône du jeu. Retour de Joachim le même
2242
2242
  jour. Il devient `Icon nom="chevron-bas" taille="sm"`, en `--label`, et
2243
2243
  pivote d'un demi-tour quand la liste est ouverte. La classe
2244
2244
  `.zv-select__chevron` reste (elle porte la couleur et la rotation).
2245
+
2246
+ ---
2247
+
2248
+ ## Deux régressions vues en production chez mcp-factory (03/11/2026, 0.50.1)
2249
+
2250
+ ### Une modale ouverte décalait la colonne de navigation
2251
+
2252
+ `useOverlay` verrouillait le défilement sur `body` (`overflow: hidden`), et
2253
+ `overlays.css` le verrouille déjà sur `html` (`html:has(.zv-modal--open)`).
2254
+ Les deux ensemble se contrarient : quand `html` n'est plus en `visible`, le
2255
+ `overflow` de `body` ne remonte plus au viewport, et `body` devient LUI-MÊME
2256
+ un conteneur de défilement, à zéro. Une colonne `position: sticky; top: 0`
2257
+ se cale alors en haut de `body`, que la page a déjà fait défiler hors de
2258
+ l'écran : la colonne perdait son haut (logo, liens) à l'ouverture de toute
2259
+ modale, dès qu'on avait descendu dans la page.
2260
+
2261
+ Le verrou JavaScript porte désormais sur `html` (`documentElement`), comme
2262
+ la règle CSS. `body` n'est plus jamais un conteneur de défilement.
2263
+
2264
+ ### La liste de `SelectMenu` était rognée par son conteneur
2265
+
2266
+ Posée dans un `Table` (rôle d'un membre sur sa ligne), la liste s'ouvrait
2267
+ DANS le cadre du tableau, qui défile horizontalement (`overflow-x: auto`,
2268
+ donc `overflow-y` calculé à `auto` aussi) : elle était coupée net sous la
2269
+ ligne. Même défaut dans tout conteneur qui défile.
2270
+
2271
+ La liste est désormais en `position: fixed`, placée sous le déclencheur
2272
+ d'après sa boîte à l'écran, et recalculée au défilement et au
2273
+ redimensionnement : elle échappe à tout conteneur rogné. Elle s'ouvre AU-
2274
+ DESSUS quand la place manque dessous et qu'il y en a davantage dessus, se
2275
+ borne à la place disponible (et défile au-delà), et ne déborde jamais de
2276
+ la fenêtre à droite. Sa largeur MINIMALE est celle du déclencheur (`--zv-menu-largeur`), sa
2277
+ largeur celle de ses options (`max-content`), bornée à la fenêtre : sous un
2278
+ déclencheur calé sur son contenu (« Membre »), l'option longue
2279
+ (« Administrateur ») ne déborde plus. Une app qui surchargeait `min-width:
2280
+ 100%` doit écrire `var(--zv-menu-largeur)` : 100 % vaudrait la fenêtre.
2281
+
2282
+ ⚠️ Limite connue : un ancêtre en `transform` redevient le bloc conteneur
2283
+ d'un `fixed`. Aucun composant du paquet n'en pose autour d'une liste ;
2284
+ une app qui anime un conteneur par `transform` (colonne glissante) ne doit
2285
+ pas y loger de `SelectMenu` ouvert pendant l'animation.
2286
+
2287
+ ---
2288
+
2289
+ ## L'interrupteur suit l'option arrondie, et les logos des partenaires (03/11/2026, 0.51.0)
2290
+
2291
+ Demande de Joachim, vue sur la Marketplace de Tésope (cabinet en `zv-arrondi`
2292
+ depuis le 27/10) : des cartes et des boutons arrondis, mais des
2293
+ interrupteurs carrés, et des extensions (Microsoft 365, DocuSign, Henrri…)
2294
+ reconnues à une icône générique plutôt qu'à leur marque.
2295
+
2296
+ ### L'interrupteur
2297
+
2298
+ HORS RELEVÉ. En angle vif (le défaut de la charte), rien ne change : piste
2299
+ et bouton restent carrés, comme arbitré le 25/08. Sous `zv-arrondi`, la
2300
+ piste passe en gélule et le bouton en rond. Deux tokens à part,
2301
+ `--r-switch` et `--r-switch-knob`, nuls hors de l'option : le rayon des
2302
+ autres composants (3 px pour `--r-pill`) ne convient pas à une piste de
2303
+ 20 px, qui ne se lirait alors ni carrée ni ronde. Dans une app arrondie,
2304
+ un interrupteur carré était le seul angle vif de l'écran : il se lisait
2305
+ comme une erreur, pas comme un choix.
2306
+
2307
+ La tuile d'icône (`IconTile`) suit aussi `--r-pill`, nul par défaut : même
2308
+ raison, dans une app arrondie elle était la seule boîte carrée d'une carte.
2309
+
2310
+ ### Les logos des partenaires
2311
+
2312
+ Entrée séparée `@zevra/ui/react/partenaires`, sur le modèle des clients :
2313
+ les fichiers dans `logos/partenaires/` (provenance de chacun dans
2314
+ `index.json`), inlinés par `scripts/build-partenaires-data.mjs`. À la
2315
+ différence des clients, ils restent EN COULEUR : c'est la marque de
2316
+ l'éditeur, elle ne se recolore pas.
2317
+
2318
+ `LogoPartenaire` reprend le gabarit d'`IconTile` (40×40, même filet), sur
2319
+ blanc : la teinte indigo pâle aurait sali les couleurs de la marque. Le logo
2320
+ occupe 60 % de la tuile ; une icône d'application à fond plein (Henrri) la
2321
+ couvre entière. Un produit Zevra branché comme service (Mémoire) passe son
2322
+ glyphe par `src`, depuis `@zevra/ui/glyphes` : jamais une image de l'app.
2323
+
2324
+ Cinq marques au départ : Microsoft, Google, DocuSign, Henrri, Maileva.
2325
+ Universign n'y est pas : universign.com renvoie désormais vers Signaturit,
2326
+ et poser le logo d'une autre marque serait un faux. Un service sans logo
2327
+ garde son `IconTile` : on n'invente pas de marque.
@@ -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,MAAsmpT,CAAA;AAEhopT;;;yBAGyB;AACzB,eAAO,MAAM,WAAW,EAAE,MAAk4B,CAAA"}
1
+ {"version":3,"file":"css-inline.d.ts","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAGA;;;iEAGiE;AACjE,eAAO,MAAM,WAAW,EAAE,MAAg4tT,CAAA;AAE15tT;;;yBAGyB;AACzB,eAAO,MAAM,WAAW,EAAE,MAAk4B,CAAA"}