@zevra/ui 0.31.0 → 0.32.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.32.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,49 @@ 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 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
+ glyphe={GLYPHES.zevra}
1035
+ titre="Page introuvable"
1036
+ reference={<>Réf. 404 · GET /dossier/2019</>}
1037
+ actions={<>
1038
+ <ButtonLink href="/">Retour à l'accueil</ButtonLink>
1039
+ <ButtonLink href="/contact" variante="fantome">Nous signaler le lien</ButtonLink>
1040
+ </>}
1041
+ >
1042
+ Elle a peut-être exercé son droit à l'effacement.{' '}
1043
+ <strong>Plus sérieusement</strong> : le lien est mort, l'adresse a changé,
1044
+ ou cette page n'a jamais été versée au dossier.
1045
+ </PageErreur>`,
1046
+ rendu: (
1047
+ <PageErreur
1048
+ code="404"
1049
+ glyphe={GLYPHES.zevra}
1050
+ titre="Page introuvable"
1051
+ reference={<>Réf. 404 · GET /dossier/2019</>}
1052
+ style={{ minHeight: 0, padding: '40px 24px' }}
1053
+ actions={
1054
+ <>
1055
+ <ButtonLink href="#">Retour à l’accueil</ButtonLink>
1056
+ <ButtonLink href="#" variante="fantome">
1057
+ Nous signaler le lien
1058
+ </ButtonLink>
1059
+ </>
1060
+ }
1061
+ >
1062
+ Elle a peut-être exercé son droit à l’effacement.{' '}
1063
+ <strong>Plus sérieusement</strong> : le lien est mort, l’adresse a changé, ou
1064
+ cette page n’a jamais été versée au dossier.
1065
+ </PageErreur>
1066
+ ),
1067
+ },
1027
1068
  {
1028
1069
  id: 'cartes',
1029
1070
  nom: 'Cartes',
package/react/content.tsx CHANGED
@@ -726,3 +726,60 @@ 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
+ /** L'URL du glyphe Zevra — `GLYPHES.zevra` de `@zevra/ui/glyphes`. Sur une
736
+ * page qui n'a plus de contenu, c'est le seul repère qui dise encore où
737
+ * l'on se trouve. */
738
+ glyphe?: string
739
+ /** Le titre. ⚠️ Il dit la panne EN CLAIR : « Page introuvable », pas un
740
+ * jeu de mots. L'esprit vient dans le texte, jamais avant l'information. */
741
+ titre: ReactNode
742
+ /** Les actions : un bouton plein pour la sortie, un fantôme pour le
743
+ * recours. Deux au plus — au-delà, la page d'erreur devient un menu. */
744
+ actions?: ReactNode
745
+ /** La cote de l'incident (`GET /dossier/2019`). Elle donne au visiteur de
746
+ * quoi signaler la panne et au support de quoi la retrouver. */
747
+ reference?: ReactNode
748
+ className?: string
749
+ /** L'explication. C'est ici, et seulement ici, que l'esprit a sa place. */
750
+ children?: ReactNode
751
+ }
752
+
753
+ /**
754
+ * Une page entière d'erreur — 404, 403, 410, 500, maintenance.
755
+ *
756
+ * ⚠️ ELLE NE PORTE AUCUN TEXTE PAR DÉFAUT, et c'est délibéré : une
757
+ * plaisanterie câblée dans un design system part dans les sept apps, dans
758
+ * une seule langue, et n'en revient jamais. La copie de référence — celle
759
+ * qui plaisante en vocabulaire juridique — vit dans l'exemple du catalogue,
760
+ * là où on la lit avant de la copier.
761
+ */
762
+ export function PageErreur({
763
+ code,
764
+ glyphe,
765
+ titre,
766
+ actions,
767
+ reference,
768
+ className,
769
+ children,
770
+ ...reste
771
+ }: PageErreurProps) {
772
+ return (
773
+ <div className={cx('zv-errpage', className)} {...reste}>
774
+ {glyphe && <img src={glyphe} alt="Zevra" className="zv-errpage__glyphe" />}
775
+ <p className="zv-errpage__kicker">
776
+ <span className="zv-spec" aria-hidden="true" />
777
+ <span className="zv-mono zv-mono--label">Erreur {code}</span>
778
+ </p>
779
+ <h1 className="zv-errpage__titre">{titre}</h1>
780
+ {children && <p className="zv-errpage__texte">{children}</p>}
781
+ {actions && <div className="zv-errpage__actions">{actions}</div>}
782
+ {reference && <p className="zv-errpage__ref">{reference}</p>}
783
+ </div>
784
+ )
785
+ }