@zevra/ui 0.31.0 → 0.33.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,+kmRAA+kmR,CAAA;AAElnmR;;;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,22tRAA22tR,CAAA;AAE94tR;;;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.31.0",
3
+ "version": "0.33.0",
4
4
  "description": "Design system Zevra « Encre & Papier » — tokens, CSS des composants et logos officiels.",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -20,7 +20,7 @@ import {
20
20
  Callout, Card, Check, Divider, Ent, EntText, Faq, FaqItem, Flow, FlowStep,
21
21
  LegalPage,
22
22
  Glass, IndexItem, IndexList, Inset, Media, MediaCoin, MediaVoile, MiniStat,
23
- MiniStatItem, Pill, Price,
23
+ MiniStatItem, PageErreur, Pill, Price,
24
24
  Quote, Rows, RowsItem, Src, SrcRow, StatCard, Tag, UiPreview,
25
25
  } from './content.js'
26
26
  import {
@@ -1022,8 +1022,52 @@ export const CATALOGUE: GroupeCatalogue[] = [
1022
1022
  couche: 'commun',
1023
1023
  css: 'components.css',
1024
1024
  resume:
1025
- 'Surfaces, encarts, étiquettes éditoriales et blocs de preuve. ⚠️ Deux règles de charte y sont opposables : jamais de fausse citation, jamais de lorem dans un aperçu produit.',
1025
+ 'Surfaces, encarts, étiquettes éditoriales, blocs de preuve et la page d’erreur. ⚠️ Deux règles de charte y sont opposables : jamais de fausse citation, jamais de lorem dans un aperçu produit.',
1026
1026
  exemples: [
1027
+ {
1028
+ id: 'page-erreur',
1029
+ nom: 'Page d’erreur',
1030
+ resume:
1031
+ '404, 403, 410, 500. ⚠️ Le glyphe est DÉCORATIF par défaut (glypheAlt=""), et le mot « Erreur » se passe en prop : la 0.32.0 posait alt="Zevra" et « Erreur » en dur, si bien que la 404 de Mémoire annonçait « Zevra » au lecteur d’écran et affichait « Erreur 404 » sous /en/. Le composant ne porte AUCUN texte : une plaisanterie câblée dans un design system part dans les sept apps, dans une seule langue, et n’en revient jamais. La copie ci-dessous est la RÉFÉRENCE, à copier et à adapter. Elle plaisante en vocabulaire juridique — un mot juste employé de travers, pas une blague sur un ton qu’Encre & Papier n’a pas — et l’ordre est fixe : le titre dit la panne en clair, l’esprit vient ensuite et se dédit lui-même. Une page d’erreur qui fait rire avant d’informer est ratée.',
1032
+ code: `<PageErreur
1033
+ code="404"
1034
+ libelle="Erreur" {/* le mot est À VOUS : « Error » sous /en/ */}
1035
+ glyphe={GLYPHES.memoire} {/* le glyphe de VOTRE produit */}
1036
+ glypheAlt="" {/* vide = décoratif, et c'est le bon défaut */}
1037
+ titre="Page introuvable"
1038
+ reference={<>Réf. 404 · GET /dossier/2019</>}
1039
+ actions={<>
1040
+ <ButtonLink href="/">Retour à l'accueil</ButtonLink>
1041
+ <ButtonLink href="/contact" variante="fantome">Nous signaler le lien</ButtonLink>
1042
+ </>}
1043
+ >
1044
+ Elle a peut-être exercé son droit à l'effacement.{' '}
1045
+ <strong>Plus sérieusement</strong> : le lien est mort, l'adresse a changé,
1046
+ ou cette page n'a jamais été versée au dossier.
1047
+ </PageErreur>`,
1048
+ rendu: (
1049
+ <PageErreur
1050
+ code="404"
1051
+ libelle="Erreur"
1052
+ glyphe={GLYPHES.zevra}
1053
+ titre="Page introuvable"
1054
+ reference={<>Réf. 404 · GET /dossier/2019</>}
1055
+ style={{ minHeight: 0, padding: '40px 24px' }}
1056
+ actions={
1057
+ <>
1058
+ <ButtonLink href="#">Retour à l’accueil</ButtonLink>
1059
+ <ButtonLink href="#" variante="fantome">
1060
+ Nous signaler le lien
1061
+ </ButtonLink>
1062
+ </>
1063
+ }
1064
+ >
1065
+ Elle a peut-être exercé son droit à l’effacement.{' '}
1066
+ <strong>Plus sérieusement</strong> : le lien est mort, l’adresse a changé, ou
1067
+ cette page n’a jamais été versée au dossier.
1068
+ </PageErreur>
1069
+ ),
1070
+ },
1027
1071
  {
1028
1072
  id: 'cartes',
1029
1073
  nom: 'Cartes',
package/react/content.tsx CHANGED
@@ -726,3 +726,80 @@ export function LegalPage({
726
726
  </article>
727
727
  )
728
728
  }
729
+
730
+ /* ─── Page d'erreur ─────────────────────────────────────────────────── */
731
+
732
+ export interface PageErreurProps extends Div {
733
+ /** Le code, tel qu'il s'affiche dans le kicker (`404`, `403`, `500`). */
734
+ code: string
735
+ /** Le mot qui précède le code (« Erreur », « Error », « Error »). Absent,
736
+ * seul le code s'affiche.
737
+ *
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. */
741
+ libelle?: string
742
+ /** L'URL du glyphe — `GLYPHES.memoire` de `@zevra/ui/glyphes`. Sur une
743
+ * page qui n'a plus de contenu, c'est le seul repère qui dise encore où
744
+ * l'on se trouve. */
745
+ glyphe?: string
746
+ /** Le texte alternatif du glyphe. VIDE par défaut, donc décoratif : sur
747
+ * une page d'erreur, la marque n'apporte rien que le titre et le kicker
748
+ * ne disent déjà, et l'annoncer place un nom de produit devant
749
+ * l'information que le lecteur est venu chercher.
750
+ *
751
+ * ⚠️ Il valait `"Zevra"` en dur jusqu'à la 0.33.0 : sur la 404 de
752
+ * Mémoire, un lecteur d'écran annonçait « Zevra » devant le M de Mémoire,
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
755
+ * dépôt, et celle-ci l'enfreignait. */
756
+ glypheAlt?: string
757
+ /** Le titre. ⚠️ Il dit la panne EN CLAIR : « Page introuvable », pas un
758
+ * jeu de mots. L'esprit vient dans le texte, jamais avant l'information. */
759
+ titre: ReactNode
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. */
762
+ actions?: ReactNode
763
+ /** La cote de l'incident (`GET /dossier/2019`). Elle donne au visiteur de
764
+ * quoi signaler la panne et au support de quoi la retrouver. */
765
+ reference?: ReactNode
766
+ className?: string
767
+ /** L'explication. C'est ici, et seulement ici, que l'esprit a sa place. */
768
+ children?: ReactNode
769
+ }
770
+
771
+ /**
772
+ * Une page entière d'erreur — 404, 403, 410, 500, maintenance.
773
+ *
774
+ * ⚠️ ELLE NE PORTE AUCUN TEXTE PAR DÉFAUT, et c'est délibéré : une
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,
778
+ * là où on la lit avant de la copier.
779
+ */
780
+ export function PageErreur({
781
+ code,
782
+ libelle,
783
+ glyphe,
784
+ glypheAlt = '',
785
+ titre,
786
+ actions,
787
+ reference,
788
+ className,
789
+ children,
790
+ ...reste
791
+ }: PageErreurProps) {
792
+ return (
793
+ <div className={cx('zv-errpage', className)} {...reste}>
794
+ {glyphe && <img src={glyphe} alt={glypheAlt} className="zv-errpage__glyphe" />}
795
+ <p className="zv-errpage__kicker">
796
+ <span className="zv-spec" aria-hidden="true" />
797
+ <span className="zv-mono zv-mono--label">{libelle ? `${libelle} ${code}` : code}</span>
798
+ </p>
799
+ <h1 className="zv-errpage__titre">{titre}</h1>
800
+ {children && <p className="zv-errpage__texte">{children}</p>}
801
+ {actions && <div className="zv-errpage__actions">{actions}</div>}
802
+ {reference && <p className="zv-errpage__ref">{reference}</p>}
803
+ </div>
804
+ )
805
+ }