@zevra/ui 0.35.0 → 0.36.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.
Files changed (104) hide show
  1. package/DECISIONS.md +264 -208
  2. package/README.md +21 -21
  3. package/demo/app.html +6 -6
  4. package/demo/index.html +3 -3
  5. package/dist/actions.d.ts +8 -8
  6. package/dist/actions.d.ts.map +1 -1
  7. package/dist/actions.js +1 -1
  8. package/dist/actions.js.map +1 -1
  9. package/dist/catalogue.d.ts +2 -2
  10. package/dist/catalogue.js +67 -67
  11. package/dist/catalogue.js.map +1 -1
  12. package/dist/content.d.ts +23 -23
  13. package/dist/content.d.ts.map +1 -1
  14. package/dist/content.js +16 -16
  15. package/dist/content.js.map +1 -1
  16. package/dist/css-inline.d.ts +1 -1
  17. package/dist/css-inline.d.ts.map +1 -1
  18. package/dist/css-inline.js +4 -4
  19. package/dist/css-inline.js.map +1 -1
  20. package/dist/data-table.d.ts +1 -1
  21. package/dist/data.d.ts +7 -7
  22. package/dist/data.js +5 -5
  23. package/dist/email-tokens.js +1 -1
  24. package/dist/email.d.ts +6 -6
  25. package/dist/email.js +8 -8
  26. package/dist/email.js.map +1 -1
  27. package/dist/feedback.d.ts +10 -10
  28. package/dist/feedback.d.ts.map +1 -1
  29. package/dist/feedback.js +3 -3
  30. package/dist/forms.d.ts +12 -12
  31. package/dist/forms.js +5 -5
  32. package/dist/glyph-data.d.ts +2 -2
  33. package/dist/glyph-data.js +3 -3
  34. package/dist/glyph-urls.js +1 -1
  35. package/dist/glyphes.d.ts +2 -2
  36. package/dist/glyphes.js +4 -4
  37. package/dist/icon-data.d.ts +1 -1
  38. package/dist/icon-data.js +2 -2
  39. package/dist/icon.d.ts +5 -5
  40. package/dist/icon.js +1 -1
  41. package/dist/index.js +4 -4
  42. package/dist/layout.d.ts +21 -21
  43. package/dist/layout.d.ts.map +1 -1
  44. package/dist/layout.js +15 -15
  45. package/dist/layout.js.map +1 -1
  46. package/dist/navigation.d.ts +16 -16
  47. package/dist/navigation.d.ts.map +1 -1
  48. package/dist/navigation.js +9 -9
  49. package/dist/navigation.js.map +1 -1
  50. package/dist/overlays.d.ts +6 -6
  51. package/dist/overlays.d.ts.map +1 -1
  52. package/dist/overlays.js +5 -5
  53. package/dist/select-menu.d.ts +1 -1
  54. package/dist/select-menu.js +2 -2
  55. package/dist/surfaces.d.ts +8 -8
  56. package/dist/surfaces.d.ts.map +1 -1
  57. package/dist/surfaces.js +6 -6
  58. package/dist/surfaces.js.map +1 -1
  59. package/dist/typography.d.ts +4 -4
  60. package/dist/typography.d.ts.map +1 -1
  61. package/dist/typography.js +3 -3
  62. package/dist/typography.js.map +1 -1
  63. package/icons/index.json +1 -1
  64. package/package.json +2 -2
  65. package/react/actions.tsx +9 -9
  66. package/react/catalogue.tsx +68 -68
  67. package/react/content.tsx +28 -28
  68. package/react/css-inline.ts +4 -4
  69. package/react/data-table.tsx +3 -3
  70. package/react/data.tsx +9 -9
  71. package/react/email-tokens.ts +1 -1
  72. package/react/email.ts +10 -10
  73. package/react/feedback.tsx +12 -12
  74. package/react/forms.tsx +15 -15
  75. package/react/glyph-data.ts +3 -3
  76. package/react/glyph-urls.ts +1 -1
  77. package/react/glyphes.ts +4 -4
  78. package/react/icon-data.ts +2 -2
  79. package/react/icon.tsx +6 -6
  80. package/react/index.ts +4 -4
  81. package/react/layout.tsx +22 -22
  82. package/react/navigation.tsx +18 -18
  83. package/react/overlays.tsx +9 -9
  84. package/react/select-menu.tsx +3 -3
  85. package/react/surfaces.tsx +10 -10
  86. package/react/typography.tsx +6 -6
  87. package/src/base.css +10 -10
  88. package/src/components.css +49 -49
  89. package/src/data.css +41 -41
  90. package/src/feedback.css +55 -55
  91. package/src/fonts.css +2 -2
  92. package/src/forms.css +50 -50
  93. package/src/icons.css +10 -10
  94. package/src/index.css +1 -1
  95. package/src/layout.css +27 -27
  96. package/src/motion.css +16 -16
  97. package/src/motion.js +4 -4
  98. package/src/nav.js +5 -5
  99. package/src/navigation.css +62 -62
  100. package/src/overlays.css +14 -14
  101. package/src/rail.js +6 -6
  102. package/src/surfaces.css +11 -11
  103. package/src/tokens.css +14 -14
  104. package/tokens/index.js +8 -8
package/react/content.tsx CHANGED
@@ -1,4 +1,4 @@
1
- // Contenu — surfaces, badges et blocs éditoriaux. Sans état, donc sans
1
+ // Contenu : surfaces, badges et blocs éditoriaux. Sans état, donc sans
2
2
  // « use client ».
3
3
 
4
4
  import type { ElementType, HTMLAttributes, ReactNode } from 'react'
@@ -8,7 +8,7 @@ type Div = Omit<HTMLAttributes<HTMLDivElement>, 'className'>
8
8
  type Span = Omit<HTMLAttributes<HTMLSpanElement>, 'className'>
9
9
 
10
10
  export interface CardProps extends Div {
11
- /** Retrait intérieur. Sans, la carte est nue — à toi de poser le tien. */
11
+ /** Retrait intérieur. Sans, la carte est nue : à toi de poser le tien. */
12
12
  padding?: 'aucun' | 'normal' | 'large'
13
13
  /** Filet coloré : un état porté par la bordure, pas par un fond. */
14
14
  etat?: 'ok' | 'err'
@@ -80,7 +80,7 @@ export interface SrcProps extends Span {
80
80
  className?: string
81
81
  }
82
82
 
83
- /** Puce de source — BOSS, Judilibre, KALI. */
83
+ /** Puce de source : BOSS, Judilibre, KALI. */
84
84
  export function Src({ attenue, className, ...reste }: SrcProps) {
85
85
  return (
86
86
  <span
@@ -154,7 +154,7 @@ export interface QuoteProps extends Div {
154
154
  }
155
155
 
156
156
  /** ⚠️ RÈGLE DE CHARTE : jamais de fausse citation. Tant qu'un verbatim client
157
- * n'a pas été recueilli, ce bloc reste en réserve — un placeholder crédible
157
+ * n'a pas été recueilli, ce bloc reste en réserve : un placeholder crédible
158
158
  * finit toujours par partir en production. */
159
159
  export function Quote({ auteur, className, children, ...reste }: QuoteProps) {
160
160
  return (
@@ -172,7 +172,7 @@ export interface PriceProps extends Div {
172
172
  unite?: ReactNode
173
173
  /** La mention sous la carte. */
174
174
  note?: ReactNode
175
- /** La formule recommandée — bandeau indigo. Trois cartes par page au plus. */
175
+ /** La formule recommandée : bandeau indigo. Trois cartes par page au plus. */
176
176
  recommande?: boolean
177
177
  className?: string
178
178
  children?: ReactNode
@@ -262,7 +262,7 @@ export interface FaqItemProps
262
262
  * et la recherche du navigateur (⌘F) l'ouvre toute seule pour montrer ce
263
263
  * qu'elle a trouvé.
264
264
  *
265
- * ⚠️ La réponse reste DANS LE DOM quand la question est fermée — `details`
265
+ * ⚠️ La réponse reste DANS LE DOM quand la question est fermée : `details`
266
266
  * la masque, il ne la retire pas. C'est ce qui permet à une page de porter
267
267
  * un balisage `FAQPage` honnête : ce que le moteur lit est bien ce que le
268
268
  * visiteur peut ouvrir. Un accordéon qui démonte son contenu annoncerait
@@ -272,7 +272,7 @@ export interface FaqItemProps
272
272
  * de `LinkArrow` : recopié à la main, il finit par diverger.
273
273
  *
274
274
  * `question` accepte un TITRE (`<h3>Ma question</h3>`) : une FAQ de vitrine
275
- * veut ses questions dans le plan du document — c'est ce que lisent les
275
+ * veut ses questions dans le plan du document, c'est ce que lisent les
276
276
  * moteurs, et ce que parcourt un lecteur d'écran qui saute de titre en
277
277
  * titre. Le CSS lui retire ce que le navigateur lui met : le niveau reste
278
278
  * au balisage, l'apparence au système. */
@@ -319,7 +319,7 @@ export interface UiPreviewProps extends Div {
319
319
 
320
320
  /** La preuve produit : une question, une réponse, ses sources.
321
321
  * ⚠️ RÈGLE DE CHARTE : toujours de VRAIES données réalistes, jamais de
322
- * lorem — c'est ce bloc qui porte la crédibilité de la page. */
322
+ * lorem, c'est ce bloc qui porte la crédibilité de la page. */
323
323
  export function UiPreview({
324
324
  question,
325
325
  sources,
@@ -353,7 +353,7 @@ export function Check({ className, ...reste }: Span & { className?: string }) {
353
353
  }
354
354
 
355
355
  /* ─── Blocs éditoriaux ─────────────────────────────────────────────────
356
- * HORS RELEVÉ — ajoutés à la demande de la DA (règle de variété du
356
+ * HORS RELEVÉ, ajoutés à la demande de la DA (règle de variété du
357
357
  * 24/08/2026 : jamais deux blocs de même forme qui se suivent, 80 % de
358
358
  * formes différentes par page). Quatre façons de poser du contenu SANS
359
359
  * carte, pour que les grilles de cartes redeviennent un choix et non un
@@ -384,7 +384,7 @@ export function RowsItem({ cle, className, children, ...reste }: RowsItemProps)
384
384
  }
385
385
 
386
386
  export interface IndexListProps extends Div {
387
- /** Grille de trois, sans filets — l'espace fait la séparation. */
387
+ /** Grille de trois, sans filets : l'espace fait la séparation. */
388
388
  cols?: boolean
389
389
  className?: string
390
390
  }
@@ -416,14 +416,14 @@ export function IndexItem({ num, className, children, ...reste }: IndexItemProps
416
416
  )
417
417
  }
418
418
 
419
- /** Déroulé vertical — la déclinaison verticale de `Steps`, pour les
419
+ /** Déroulé vertical : la déclinaison verticale de `Steps`, pour les
420
420
  * méthodes qui se lisent comme un récit. */
421
421
  export function Flow({ className, ...reste }: Div & { className?: string }) {
422
422
  return <div className={cx('zv-flow', className)} {...reste} />
423
423
  }
424
424
 
425
425
  export interface FlowStepProps extends Div {
426
- /** Les points reprennent les couleurs des points de méthode — l'un des
426
+ /** Les points reprennent les couleurs des points de méthode : l'un des
427
427
  * trois emplois autorisés du spectre. Sans teinte : iris. */
428
428
  teinte?: 'violet' | 'cyan'
429
429
  className?: string
@@ -446,7 +446,7 @@ export interface CalloutProps extends Div {
446
446
 
447
447
  /** Encart d'appel sur accent-soft : l'offre transverse qui doit se voir
448
448
  * sans crier (remise, renvoi vers une autre page). L'action se passe en
449
- * enfant — elle se range à droite, et tombe sous le titre sur mobile. */
449
+ * enfant : elle se range à droite, et tombe sous le titre sur mobile. */
450
450
  export function Callout({ titre, className, children, ...reste }: CalloutProps) {
451
451
  return (
452
452
  <div className={cx('zv-callout', className)} {...reste}>
@@ -460,7 +460,7 @@ export interface MediaProps extends Div {
460
460
  /** Rapport du cadre. Quatre, et pas davantage : un cinquième se demande. */
461
461
  ratio?: '16-9' | '4-3' | '1-1' | '3-2'
462
462
  /**
463
- * L'image est CONTENUE au lieu de remplir — un logo, un schéma, une pièce
463
+ * L'image est CONTENUE au lieu de remplir : un logo, un schéma, une pièce
464
464
  * qu'on ne peut pas rogner. Le papier passe alors derrière : il restera du
465
465
  * vide, autant qu'il soit choisi.
466
466
  */
@@ -498,7 +498,7 @@ export interface MediaImgProps
498
498
  }
499
499
 
500
500
  /**
501
- * L'image d'un cadre. `alt` est OBLIGATOIRE — vide pour une image
501
+ * L'image d'un cadre. `alt` est OBLIGATOIRE, vide pour une image
502
502
  * décorative, décrite sinon : c'est un choix, pas un oubli.
503
503
  *
504
504
  * Un produit qui optimise ses images (next/image) pose la classe
@@ -537,14 +537,14 @@ export function MediaCoin({ gauche, haut, className, children, ...reste }: Media
537
537
  }
538
538
 
539
539
  /** Voile de lecture : un titre posé SUR une image n'est lisible qu'au-dessus
540
- * d'un dégradé. Il ne capte pas le pointeur — le cadre reste cliquable. */
540
+ * d'un dégradé. Il ne capte pas le pointeur : le cadre reste cliquable. */
541
541
  export function MediaVoile({ className, ...reste }: Span & { className?: string }) {
542
542
  return <span aria-hidden="true" className={cx('zv-media__voile', className)} {...reste} />
543
543
  }
544
544
 
545
545
  /* ─── Page légale ──────────────────────────────────────────────────────
546
546
  * La FORME d'un document contractuel. Le TEXTE vit dans @zevra/legal,
547
- * versionné et archivé — ce composant n'en dépend pas : il décrit la forme
547
+ * versionné et archivé, ce composant n'en dépend pas : il décrit la forme
548
548
  * qu'il sait rendre, et le typage structurel de TypeScript fait le reste.
549
549
  * C'est délibéré : le design system ne doit pas dépendre du contenu, sinon
550
550
  * une correction de clause deviendrait une livraison de charte. */
@@ -582,8 +582,8 @@ export interface DocumentLegalRendu {
582
582
  }
583
583
 
584
584
  /* ⚠️ POURQUOI dangerouslySetInnerHTML EST ACCEPTABLE ICI, ET SEULEMENT ICI.
585
- * Le texte porte trois balises et trois seulement — <strong>, <em>,
586
- * <a href> — qui ont un sens JURIDIQUE : une clause mise en avant par
585
+ * Le texte porte trois balises et trois seulement (<strong>, <em>,
586
+ * <a href>) qui ont un sens JURIDIQUE : une clause mise en avant par
587
587
  * l'auteur, un renvoi vers un autre contrat. Les retirer appauvrirait le
588
588
  * document ; les rendre en texte brut afficherait des chevrons.
589
589
  * Ce contenu vient d'un dépôt versionné, JAMAIS d'une saisie utilisateur, et
@@ -671,7 +671,7 @@ function BlocRendu({ bloc }: { bloc: BlocLegal }) {
671
671
 
672
672
  /** Le rendu d'un document contractuel. Le sommaire ne fait PAS partie du
673
673
  * composant : il se pose à côté avec `Rail`, dont les ancres sont les `id`
674
- * de section — c'est ce qui permet de le placer en marge sur la vitrine et
674
+ * de section, c'est ce qui permet de le placer en marge sur la vitrine et
675
675
  * de l'omettre dans un tunnel d'inscription.
676
676
  *
677
677
  * ⚠️ Ne jamais tronquer un document contractuel derrière un « voir plus » :
@@ -736,10 +736,10 @@ export interface PageErreurProps extends Div {
736
736
  * seul le code s'affiche.
737
737
  *
738
738
  * ⚠️ EN PROP, et pas en dur : une 404 anglaise de Mémoire affichait
739
- * « Erreur 404 ». Le composant est censé ne porter aucun texte — c'est
740
- * écrit dans son arbitrage —, et il en portait quand même. */
739
+ * « Erreur 404 ». Le composant est censé ne porter aucun texte, c'est
740
+ * écrit dans son arbitrage, et il en portait quand même. */
741
741
  libelle?: string
742
- /** L'URL du glyphe — `GLYPHES.memoire` de `@zevra/ui/glyphes`. Sur une
742
+ /** L'URL du glyphe : `GLYPHES.memoire` de `@zevra/ui/glyphes`. Sur une
743
743
  * page qui n'a plus de contenu, c'est le seul repère qui dise encore où
744
744
  * l'on se trouve. */
745
745
  glyphe?: string
@@ -751,14 +751,14 @@ export interface PageErreurProps extends Div {
751
751
  * ⚠️ Il valait `"Zevra"` en dur jusqu'à la 0.33.0 : sur la 404 de
752
752
  * Mémoire, un lecteur d'écran annonçait « Zevra » devant le M de Mémoire,
753
753
  * et aucune prop ne permettait de le corriger. Une valeur qu'une app aura
754
- * légitimement besoin d'ajuster ne se pose pas en dur — c'est la règle du
754
+ * légitimement besoin d'ajuster ne se pose pas en dur : c'est la règle du
755
755
  * dépôt, et celle-ci l'enfreignait. */
756
756
  glypheAlt?: string
757
757
  /** Le titre. ⚠️ Il dit la panne EN CLAIR : « Page introuvable », pas un
758
758
  * jeu de mots. L'esprit vient dans le texte, jamais avant l'information. */
759
759
  titre: ReactNode
760
760
  /** Les actions : un bouton plein pour la sortie, un fantôme pour le
761
- * recours. Deux au plus — au-delà, la page d'erreur devient un menu. */
761
+ * recours. Deux au plus : au-delà, la page d'erreur devient un menu. */
762
762
  actions?: ReactNode
763
763
  /** La cote de l'incident (`GET /dossier/2019`). Elle donne au visiteur de
764
764
  * quoi signaler la panne et au support de quoi la retrouver. */
@@ -769,12 +769,12 @@ export interface PageErreurProps extends Div {
769
769
  }
770
770
 
771
771
  /**
772
- * Une page entière d'erreur — 404, 403, 410, 500, maintenance.
772
+ * Une page entière d'erreur : 404, 403, 410, 500, maintenance.
773
773
  *
774
774
  * ⚠️ ELLE NE PORTE AUCUN TEXTE PAR DÉFAUT, et c'est délibéré : une
775
775
  * plaisanterie câblée dans un design system part dans les sept apps, dans
776
- * une seule langue, et n'en revient jamais. La copie de référence — celle
777
- * qui plaisante en vocabulaire juridique — vit dans l'exemple du catalogue,
776
+ * une seule langue, et n'en revient jamais. La copie de référence, celle
777
+ * qui plaisante en vocabulaire juridique, vit dans l'exemple du catalogue,
778
778
  * là où on la lit avant de la copier.
779
779
  */
780
780
  export function PageErreur({