@zevra/ui 0.27.1 → 0.28.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.
@@ -1 +1 @@
1
- {"version":3,"file":"css-inline.js","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,0EAA0E;AAE1E;;;iEAGiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAW,8m3QAA8m3Q,CAAA;AAEjp3Q;;;yBAGyB;AACzB,MAAM,CAAC,MAAM,WAAW,GAAW,03BAA03B,CAAA"}
1
+ {"version":3,"file":"css-inline.js","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,0EAA0E;AAE1E;;;iEAGiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAW,864QAA864Q,CAAA;AAEj94Q;;;yBAGyB;AACzB,MAAM,CAAC,MAAM,WAAW,GAAW,03BAA03B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zevra/ui",
3
- "version": "0.27.1",
3
+ "version": "0.28.0",
4
4
  "description": "Design system Zevra « Encre & Papier » — tokens, CSS des composants et logos officiels.",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -343,22 +343,50 @@ function DemoPopover() {
343
343
  * du CSS, il n'y a rien à hydrater. La réserve sous chaque barre existe pour
344
344
  * que le panneau ait la place de s'ouvrir sans être coupé. */
345
345
  function DemoNav() {
346
- // Toutes les marques du registre, Zevra comprise : depuis un produit, on
347
- // doit pouvoir revenir à la suite. L'ordre est celui du registre
348
- // (alphabétique) — un ordre « le courant d'abord » ferait danser la
349
- // grille d'un produit à l'autre, et on ne retrouverait plus une tuile à
350
- // sa place.
351
346
  const APPS = PRODUITS
352
347
  const barre = (utilisateur?: { nom: string; email: string }) => (
353
348
  <div style={{ border: '1px solid var(--hairline)', background: 'var(--white)' }}>
354
- <Nav style={{ padding: '0 16px', minHeight: 60 }}>
349
+ <Nav className="zv-nav--riche" style={{ padding: '0 20px', minHeight: 64 }}>
355
350
  <NavLogo>
356
- <Mono ton="ink">ZEVRA</Mono>
351
+ <Lockup capitale={15}>
352
+ <LockupMark src={GLYPHES.zevra} />
353
+ <LockupWord src={MOT_ZEVRA} alt="Zevra" />
354
+ </Lockup>
357
355
  </NavLogo>
356
+
357
+ {/* Ce qui tombe dans le tiroir sous le point de rupture. */}
358
358
  <NavLinks>
359
- <NavLink href="#">Produit</NavLink>
360
- <NavLink href="#">Méthode</NavLink>
359
+ <NavDropdown>
360
+ <NavDropdownButton>Services</NavDropdownButton>
361
+ <NavDropdownMenu>
362
+ <MenuItem>Audit</MenuItem>
363
+ <MenuItem>Formation</MenuItem>
364
+ <NavDropdownSep />
365
+ <MenuItem>Tous les services</MenuItem>
366
+ </NavDropdownMenu>
367
+ </NavDropdown>
368
+ <NavLink href="#">Store</NavLink>
369
+ <NavLink href="#">Studio</NavLink>
370
+ <NavDropdown>
371
+ <NavDropdownButton>Campus</NavDropdownButton>
372
+ <NavDropdownMenu>
373
+ <MenuItem>Bootcamp</MenuItem>
374
+ <MenuItem>Formations</MenuItem>
375
+ </NavDropdownMenu>
376
+ </NavDropdown>
377
+ <Langues>
378
+ <Langue href="#" courante>
379
+ FR
380
+ </Langue>
381
+ <Langue href="#">EN</Langue>
382
+ <Langue href="#">ES</Langue>
383
+ </Langues>
384
+ <ButtonLink href="#" compact>
385
+ Réserver 30 min
386
+ </ButtonLink>
361
387
  </NavLinks>
388
+
389
+ {/* Ce qui RESTE, à toutes les largeurs. */}
362
390
  <NavActions>
363
391
  <Lanceur>
364
392
  {APPS.map((id) => (
@@ -367,7 +395,7 @@ function DemoNav() {
367
395
  href="#"
368
396
  nom={NOMS_PRODUITS[id]}
369
397
  glyphe={GLYPHES[id]}
370
- courant={id === 'memoire'}
398
+ courant={id === 'zevra'}
371
399
  />
372
400
  ))}
373
401
  </Lanceur>
@@ -391,10 +419,10 @@ function DemoNav() {
391
419
  <div style={{ display: 'grid', gap: 10 }}>
392
420
  <Mono ton="label">CONNECTÉ</Mono>
393
421
  {barre({ nom: 'Claire Duflot', email: 'claire@duflot-avocats.fr' })}
394
- <div style={{ height: 210 }} />
422
+ <div style={{ height: 230 }} />
395
423
  <Mono ton="label">NON CONNECTÉ</Mono>
396
424
  {barre()}
397
- <div style={{ height: 180 }} />
425
+ <div style={{ height: 190 }} />
398
426
  </div>
399
427
  )
400
428
  }
@@ -1991,47 +2019,16 @@ export const CATALOGUE: GroupeCatalogue[] = [
1991
2019
  id: 'nav-vitrine',
1992
2020
  nom: 'Navigation',
1993
2021
  resume:
1994
- 'LA barre de vitrine, dans ses deux états. Elle porte toujours les mêmes pièces — logo, liens, lanceur, compte, burger : seul le CONTENU du compte change selon qu’on est connecté ou non. ⚠️ Le lanceur est là dans les DEUX cas : les produits sont publics, on y navigue connecté ou pas. Et le compte aussi — une barre où l’on ne peut pas se connecter est une barre où l’on ne revient pas. ⚠️ Lanceur et compte se posent dans « NavActions », À CÔTÉ de « NavLinks » et jamais dedans : cette rangée-là disparaît sous le point de rupture, et ils s’évanouiraient sur téléphone. Survoler le lanceur ou la pastille pour déplier — c’est du CSS, il n’y a rien à hydrater. Les glyphes viennent de « @zevra/ui/glyphes », une entrée SÉPARÉE : ils pèsent ~80 Ko inlinés, et le barrel React n’en porte pas un octet. Sans « glyphe », la tuile porte l’initiale — une image qui ne charge pas ne doit pas laisser un trou.',
1995
- code: `import { GLYPHES } from '@zevra/ui/glyphes'
1996
-
1997
- <Nav>
1998
- <NavLogo>…</NavLogo>
1999
- <NavLinks>
2000
- <NavLink href="/produit">Produit</NavLink>
2001
- <NavLink href="/methode">Méthode</NavLink>
2002
- </NavLinks>
2003
- <NavActions>
2004
- <Lanceur>
2005
- <LanceurApp href="https://memoire.zevra.tech" nom="Mémoire"
2006
- glyphe={GLYPHES.memoire} courant />
2007
- <LanceurApp href="https://lexform.zevra.tech" nom="Lexform"
2008
- glyphe={GLYPHES.lexform} />
2009
- </Lanceur>
2010
-
2011
- {/* connecté */}
2012
- <Compte utilisateur={{ nom: 'Claire Duflot', email: 'claire@cabinet.fr' }}>
2013
- <CompteLien href="/compte">Mon compte</CompteLien>
2014
- <CompteLien onClick={deconnexion} sortie>Se déconnecter</CompteLien>
2015
- </Compte>
2016
-
2017
- {/* visiteur — même composant, sans « utilisateur » */}
2018
- <Compte>
2019
- <CompteLien href="/connexion">Se connecter</CompteLien>
2020
- <CompteLien href="/inscription">Créer un compte</CompteLien>
2021
- </Compte>
2022
-
2023
- <NavBurger aria-label="Ouvrir le menu">…</NavBurger>
2024
- </NavActions>
2025
- </Nav>`,
2026
- rendu: <DemoNav />,
2027
- },
2028
- {
2029
- id: 'nav-riche',
2030
- nom: 'Navigation à familles',
2031
- resume:
2032
- 'Une barre qui porte l’architecture d’un site, pas quatre liens. Les menus s’ouvrent au survol ET au focus, en CSS seul : rien à hydrater, la barre reste rendue au serveur. ⚠️ Le déclencheur porte « .zv-navlink » pour se rendre comme un lien simple — ne jamais lui poser « font: inherit », qui reprendrait la fonte du conteneur et le grossirait par rapport à ses voisins. Poser « zv-nav--riche » sur la Nav : elle bascule alors vers le tiroir à 1150px, où une nav de cette densité déborde (mesuré), et non à 768.',
2022
+ 'LA barre du site, dans ses deux états — c’est le design de landing.zevra.tech, et il fait référence : une app qui compose sa propre barre finit par ne plus ressembler aux autres. Deux zones, et la distinction n’est pas cosmétique : « NavLinks » porte ce qui TOMBE dans le tiroir sous le point de rupture (familles, langues, appel à l’action) ; « NavActions » porte ce qui RESTE à toutes les largeurs — lanceur, compte, burger. Un compte placé dans NavLinks s’évanouit sur téléphone, et l’on ne peut plus se connecter. ⚠️ Le lanceur ET le compte sont là dans les deux états : les produits sont publics, et une barre où l’on ne peut pas se connecter est une barre où l’on ne revient pas. Seul le contenu du compte change. Survoler une famille, le lanceur ou la pastille pour déplier — c’est du CSS, il n’y a rien à hydrater. « zv-nav--riche » bascule vers le tiroir à 1150px, où une barre de cette densité déborde (mesuré), et non à 768.',
2033
2023
  code: `<Nav className="zv-nav--riche">
2034
- <NavLogo>…</NavLogo>
2024
+ <NavLogo>
2025
+ <Lockup capitale={15}>
2026
+ <LockupMark src={GLYPHES.zevra} />
2027
+ <LockupWord src={MOT_ZEVRA} alt="Zevra" />
2028
+ </Lockup>
2029
+ </NavLogo>
2030
+
2031
+ {/* tombe dans le tiroir sous le point de rupture */}
2035
2032
  <NavLinks>
2036
2033
  <NavDropdown>
2037
2034
  <NavDropdownButton>Services</NavDropdownButton>
@@ -2046,33 +2043,22 @@ export const CATALOGUE: GroupeCatalogue[] = [
2046
2043
  <Langue href="/" courante>FR</Langue>
2047
2044
  <Langue href="/en">EN</Langue>
2048
2045
  </Langues>
2046
+ <ButtonLink href="/rdv" compact>Réserver 30 min</ButtonLink>
2049
2047
  </NavLinks>
2048
+
2049
+ {/* RESTE à toutes les largeurs */}
2050
+ <NavActions>
2051
+ <Lanceur>
2052
+ <LanceurApp href="…" nom="Mémoire" glyphe={GLYPHES.memoire} />
2053
+ </Lanceur>
2054
+ <Compte utilisateur={utilisateur /* absent = visiteur */}>
2055
+ <CompteLien href="/compte">Mon compte</CompteLien>
2056
+ <CompteLien onClick={deconnexion} sortie>Se déconnecter</CompteLien>
2057
+ </Compte>
2058
+ <NavBurger aria-label="Ouvrir le menu">…</NavBurger>
2059
+ </NavActions>
2050
2060
  </Nav>`,
2051
- rendu: (
2052
- <Nav style={{ border: '1px solid var(--hairline)', padding: '0 12px' }}>
2053
- <NavLogo>
2054
- <Mono ton="ink">ZEVRA</Mono>
2055
- </NavLogo>
2056
- <NavLinks>
2057
- <NavDropdown>
2058
- <NavDropdownButton>Services</NavDropdownButton>
2059
- <NavDropdownMenu>
2060
- <MenuItem>Audit</MenuItem>
2061
- <MenuItem>Formation</MenuItem>
2062
- <NavDropdownSep />
2063
- <MenuItem>Tous les services</MenuItem>
2064
- </NavDropdownMenu>
2065
- </NavDropdown>
2066
- <NavLink href="#">Store</NavLink>
2067
- <Langues>
2068
- <Langue href="#" courante>
2069
- FR
2070
- </Langue>
2071
- <Langue href="#">EN</Langue>
2072
- </Langues>
2073
- </NavLinks>
2074
- </Nav>
2075
- ),
2061
+ rendu: <DemoNav />,
2076
2062
  },
2077
2063
  {
2078
2064
  id: 'lockup',