@zevra/ui 0.10.0 → 0.12.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.
@@ -34,7 +34,7 @@ import {
34
34
  Checkbox, Drop, Field, Input, InputAffix, Radio, Range, Search, Seg,
35
35
  SegGroup, Select, SelectAnchor, SelectTrigger, Switch, Textarea,
36
36
  } from './forms.js'
37
- import { ICONES, Icon, IconButton, NOMS_ICONES } from './icon.js'
37
+ import { ICONES, Icon, IconButton, IconTile, NOMS_ICONES } from './icon.js'
38
38
  import {
39
39
  Banner, CTA, Carousel, CarouselItem, Col, Footer, FooterMini, Grid, Grid12,
40
40
  Gutter, Hero, Nav, NavLink, NavLinks, NavLogo, ProofBar, SectionHead,
@@ -489,6 +489,24 @@ export const CATALOGUE: GroupeCatalogue[] = [
489
489
  </ButtonRow>
490
490
  ),
491
491
  },
492
+ {
493
+ id: 'boutons-icones',
494
+ nom: 'Boutons à icône',
495
+ resume:
496
+ 'L’icône vient du jeu (16 px) et hérite de la couleur du libellé — en prop, jamais recopiée à la main. « carre » est l’action à icône SEULE : aria-label OBLIGATOIRE, écrit pour l’ACTION. Ne pas confondre avec IconButton (chrome nu, 40 px) ni ChromeButton (croix bordée) : le carré est une action, il en a le poids.',
497
+ code: `<Button icone="telecharger">Télécharger le rapport</Button>
498
+ <Button variante="fantome" iconeApres="chevron-droit">Étape suivante</Button>
499
+ <Button carre variante="encre" icone="envoyer" aria-label="Envoyer le message" />`,
500
+ rendu: (
501
+ <ButtonRow>
502
+ <Button icone="telecharger">Télécharger le rapport</Button>
503
+ <Button variante="fantome" iconeApres="chevron-droit">
504
+ Étape suivante
505
+ </Button>
506
+ <Button carre variante="encre" icone="envoyer" aria-label="Envoyer le message" />
507
+ </ButtonRow>
508
+ ),
509
+ },
492
510
  {
493
511
  id: 'lien-fleche',
494
512
  nom: 'Lien fléché',
@@ -1322,16 +1340,19 @@ export const CATALOGUE: GroupeCatalogue[] = [
1322
1340
  id: 'sidebar',
1323
1341
  nom: 'Colonne latérale',
1324
1342
  resume:
1325
- 'Une colonne, un filet, rien d’autre. « courant » pose aria-current="page" en plus de la classe : sans lui, l’entrée courante est marquée pour l’œil et muette au lecteur d’écran.',
1343
+ 'Une colonne, un filet, rien d’autre. « courant » pose aria-current="page" en plus de la classe : sans lui, l’entrée courante est marquée pour l’œil et muette au lecteur d’écran. « num » accepte un rang mono OU un glyphe (le ⚙ du relevé), sur la même colonne de 16 px — jamais les deux.',
1326
1344
  code: `<Sidebar>
1327
1345
  <SidebarHead>…</SidebarHead>
1328
1346
  <SideGroup titre="Espace">
1329
1347
  <SideLink href="/bibliotheque" courant num="01">Bibliothèque</SideLink>
1330
1348
  </SideGroup>
1349
+ <SideGroup titre="Organisation">
1350
+ <SideLink href="/admin" num={<Icon nom="reglages" />}>Administration</SideLink>
1351
+ </SideGroup>
1331
1352
  <SidebarFoot>…</SidebarFoot>
1332
1353
  </Sidebar>`,
1333
1354
  rendu: (
1334
- <Sidebar style={{ height: 260 }}>
1355
+ <Sidebar style={{ height: 300 }}>
1335
1356
  <SidebarHead>
1336
1357
  <Mono ton="ink">ZEVRA</Mono>
1337
1358
  </SidebarHead>
@@ -1346,6 +1367,11 @@ export const CATALOGUE: GroupeCatalogue[] = [
1346
1367
  Import
1347
1368
  </SideLink>
1348
1369
  </SideGroup>
1370
+ <SideGroup titre="Organisation">
1371
+ <SideLink href="#" num={<Icon nom="reglages" />}>
1372
+ Administration
1373
+ </SideLink>
1374
+ </SideGroup>
1349
1375
  <SidebarFoot>
1350
1376
  <Meta discret>v2.4.1</Meta>
1351
1377
  </SidebarFoot>
@@ -1537,7 +1563,7 @@ export const CATALOGUE: GroupeCatalogue[] = [
1537
1563
  couche: 'commun',
1538
1564
  css: 'icons.css',
1539
1565
  resume:
1540
- "55 icônes TRACÉES, jamais pleines : trait 2, bouts arrondis, grille de 24. Elles héritent de la couleur du texte — c'est ce qui leur permet de fonctionner sur papier comme sur la bande manifeste sans déclinaison. Le tracé est inliné : rien à résoudre côté bundler, rien à autoriser côté CSP.",
1566
+ "55 icônes TRACÉES, jamais pleines : trait 2, grille de 24, BOUTS FRANCS et jonctions vives — le trait carré de la charte, points d'encre carrés compris. Elles héritent de la couleur du texte — c'est ce qui leur permet de fonctionner sur papier comme sur la bande manifeste sans déclinaison. Le tracé est inliné : rien à résoudre côté bundler, rien à autoriser côté CSP.",
1541
1567
  exemples: [
1542
1568
  {
1543
1569
  id: 'jeu',
@@ -1581,6 +1607,33 @@ export const CATALOGUE: GroupeCatalogue[] = [
1581
1607
  </div>
1582
1608
  ),
1583
1609
  },
1610
+ {
1611
+ id: 'tuile',
1612
+ nom: 'Tuile d’icône',
1613
+ resume:
1614
+ 'La pastille carrée devant un argument de la vitrine — liste de garanties, grille d’atouts. DÉCORATIVE par défaut : c’est le libellé voisin qui nomme, un titre ne se pose que si elle est seule. UNE par argument, jamais en décor isolé — une tuile sans libellé est un rébus.',
1615
+ code: `<IconTile nom="bouclier-verifie" />
1616
+ <IconTile nom="balance" />`,
1617
+ rendu: (
1618
+ <div style={{ display: 'grid', gap: 14, maxWidth: 380 }}>
1619
+ {(
1620
+ [
1621
+ ['bouclier-verifie', 'Hébergement souverain', 'Infrastructure dédiée, en France.'],
1622
+ ['balance', 'Sources officielles', 'BOSS, Judilibre, KALI — datées et citées.'],
1623
+ ['cadenas', 'Zéro réutilisation', 'Vos pièces n’entraînent aucun modèle.'],
1624
+ ] as const
1625
+ ).map(([nom, titre, texte]) => (
1626
+ <div key={nom} style={{ display: 'flex', gap: 14, alignItems: 'flex-start' }}>
1627
+ <IconTile nom={nom} />
1628
+ <div>
1629
+ <CardTitle as="p">{titre}</CardTitle>
1630
+ <Body taille="dense">{texte}</Body>
1631
+ </div>
1632
+ </div>
1633
+ ))}
1634
+ </div>
1635
+ ),
1636
+ },
1584
1637
  ],
1585
1638
  },
1586
1639
 
@@ -1966,24 +2019,28 @@ export const CATALOGUE: GroupeCatalogue[] = [
1966
2019
  id: 'bande',
1967
2020
  nom: 'Bande manifeste',
1968
2021
  resume:
1969
- '⚠️ LA surface sombre du système. Les surfaces sombres se font avec elle et --accent-on-dark, JAMAIS en inversant les neutres : les contrastes ont été réglés dans ce sens-là et pas dans l’autre.',
2022
+ '⚠️ LA surface sombre du système. Les surfaces sombres se font avec elle et --accent-on-dark, JAMAIS en inversant les neutres. La bande ne porte AUCUNE gouttière propre : c’est la page qui la donne — poser un Gutter dedans, sinon le contenu colle au bord.',
1970
2023
  code: `<Band lueur filigrane={<Glyph variante="watermark">…</Glyph>}>
1971
- <Kicker surSombre>Souveraineté</Kicker>
1972
- <H2>Vos pièces ne quittent pas la France.</H2>
2024
+ <Gutter>
2025
+ <Kicker surSombre>Souveraineté</Kicker>
2026
+ <H2>Vos pièces ne quittent pas la France.</H2>
2027
+ </Gutter>
1973
2028
  </Band>`,
1974
2029
  surSombre: true,
1975
2030
  rendu: (
1976
2031
  <Band lueur>
1977
- <Kicker surSombre>Souveraineté</Kicker>
1978
- <Heading taille="h2-sm">Vos pièces ne quittent pas la France.</Heading>
1979
- <Body>
1980
- Infrastructure dédiée, chiffrement au repos, aucun transfert hors Union
1981
- européenne.
1982
- </Body>
1983
- <div style={{ display: 'flex', gap: 8, marginTop: 12 }}>
1984
- <Tag surSombre etat="ok">CHIFFRÉ</Tag>
1985
- <Tag surSombre>OVHCLOUD · GRA</Tag>
1986
- </div>
2032
+ <Gutter>
2033
+ <Kicker surSombre>Souveraineté</Kicker>
2034
+ <Heading taille="h2-sm">Vos pièces ne quittent pas la France.</Heading>
2035
+ <Body>
2036
+ Infrastructure dédiée, chiffrement au repos, aucun transfert hors Union
2037
+ européenne.
2038
+ </Body>
2039
+ <div style={{ display: 'flex', gap: 8, marginTop: 12 }}>
2040
+ <Tag surSombre etat="ok">CHIFFRÉ</Tag>
2041
+ <Tag surSombre>OVHCLOUD · GRA</Tag>
2042
+ </div>
2043
+ </Gutter>
1987
2044
  </Band>
1988
2045
  ),
1989
2046
  },
package/react/content.tsx CHANGED
@@ -305,7 +305,7 @@ export function UiPreview({
305
305
  export function Check({ className, ...reste }: Span & { className?: string }) {
306
306
  return (
307
307
  <span className={cx('zv-check', className)} aria-hidden="true" {...reste}>
308
- <svg viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" width="12" height="12">
308
+ <svg viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="square" strokeLinejoin="miter" width="12" height="12">
309
309
  <polyline points="2.5,6.5 5,9 9.5,3.5" />
310
310
  </svg>
311
311
  </span>