@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.
- package/DECISIONS.md +99 -0
- package/README.md +10 -3
- package/demo/index.html +1 -0
- package/dist/actions.d.ts +18 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +6 -5
- package/dist/actions.js.map +1 -1
- package/dist/catalogue.d.ts.map +1 -1
- package/dist/catalogue.js +34 -8
- package/dist/catalogue.js.map +1 -1
- package/dist/content.js +1 -1
- package/dist/content.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/data.js +1 -1
- package/dist/data.js.map +1 -1
- package/dist/forms.js +1 -1
- package/dist/forms.js.map +1 -1
- package/dist/icon-data.js +11 -11
- package/dist/icon-data.js.map +1 -1
- package/dist/icon.d.ts +12 -1
- package/dist/icon.d.ts.map +1 -1
- package/dist/icon.js +6 -0
- package/dist/icon.js.map +1 -1
- package/icons/index.json +12 -12
- package/icons/sprite.svg +11 -11
- package/package.json +2 -1
- package/react/actions.tsx +36 -2
- package/react/catalogue.tsx +74 -17
- package/react/content.tsx +1 -1
- package/react/css-inline.ts +1 -1
- package/react/data.tsx +2 -2
- package/react/forms.tsx +1 -1
- package/react/icon-data.ts +11 -11
- package/react/icon.tsx +23 -1
- package/src/components.css +34 -1
- package/src/forms.css +6 -5
- package/src/icons.css +31 -6
- package/src/layout.css +3 -1
- package/src/motion.css +184 -105
- package/src/motion.js +53 -0
- package/src/surfaces.css +9 -0
package/react/catalogue.tsx
CHANGED
|
@@ -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:
|
|
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,
|
|
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 :
|
|
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
|
-
<
|
|
1972
|
-
|
|
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
|
-
<
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
<
|
|
1985
|
-
|
|
1986
|
-
|
|
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="
|
|
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>
|