@zevra/ui 0.35.0 → 0.37.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 +306 -208
- package/README.md +21 -21
- package/demo/app.html +6 -6
- package/demo/index.html +3 -3
- package/dist/actions.d.ts +8 -8
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +1 -1
- package/dist/actions.js.map +1 -1
- package/dist/catalogue.d.ts +2 -2
- package/dist/catalogue.js +67 -67
- package/dist/catalogue.js.map +1 -1
- package/dist/content.d.ts +23 -23
- package/dist/content.d.ts.map +1 -1
- package/dist/content.js +16 -16
- package/dist/content.js.map +1 -1
- package/dist/css-inline.d.ts +1 -1
- package/dist/css-inline.d.ts.map +1 -1
- package/dist/css-inline.js +4 -4
- package/dist/css-inline.js.map +1 -1
- package/dist/data-table.d.ts +1 -1
- package/dist/data.d.ts +7 -7
- package/dist/data.js +5 -5
- package/dist/email-tokens.js +1 -1
- package/dist/email.d.ts +6 -6
- package/dist/email.js +8 -8
- package/dist/email.js.map +1 -1
- package/dist/feedback.d.ts +10 -10
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +3 -3
- package/dist/forms.d.ts +12 -12
- package/dist/forms.js +5 -5
- package/dist/glyph-data.d.ts +2 -2
- package/dist/glyph-data.js +3 -3
- package/dist/glyph-urls.js +1 -1
- package/dist/glyphes.d.ts +2 -2
- package/dist/glyphes.js +4 -4
- package/dist/icon-data.d.ts +1 -1
- package/dist/icon-data.js +2 -2
- package/dist/icon.d.ts +5 -5
- package/dist/icon.js +1 -1
- package/dist/index.js +4 -4
- package/dist/layout.d.ts +21 -21
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +15 -15
- package/dist/layout.js.map +1 -1
- package/dist/navigation.d.ts +16 -16
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +9 -9
- package/dist/navigation.js.map +1 -1
- package/dist/overlays.d.ts +6 -6
- package/dist/overlays.d.ts.map +1 -1
- package/dist/overlays.js +5 -5
- package/dist/select-menu.d.ts +1 -1
- package/dist/select-menu.js +2 -2
- package/dist/surfaces.d.ts +8 -8
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +6 -6
- package/dist/surfaces.js.map +1 -1
- package/dist/typography.d.ts +4 -4
- package/dist/typography.d.ts.map +1 -1
- package/dist/typography.js +3 -3
- package/dist/typography.js.map +1 -1
- package/icons/index.json +1 -1
- package/package.json +2 -2
- package/react/actions.tsx +9 -9
- package/react/catalogue.tsx +68 -68
- package/react/content.tsx +28 -28
- package/react/css-inline.ts +4 -4
- package/react/data-table.tsx +3 -3
- package/react/data.tsx +9 -9
- package/react/email-tokens.ts +1 -1
- package/react/email.ts +10 -10
- package/react/feedback.tsx +12 -12
- package/react/forms.tsx +15 -15
- package/react/glyph-data.ts +3 -3
- package/react/glyph-urls.ts +1 -1
- package/react/glyphes.ts +4 -4
- package/react/icon-data.ts +2 -2
- package/react/icon.tsx +6 -6
- package/react/index.ts +4 -4
- package/react/layout.tsx +22 -22
- package/react/navigation.tsx +18 -18
- package/react/overlays.tsx +9 -9
- package/react/select-menu.tsx +3 -3
- package/react/surfaces.tsx +10 -10
- package/react/typography.tsx +6 -6
- package/src/base.css +10 -10
- package/src/components.css +49 -49
- package/src/data.css +41 -41
- package/src/feedback.css +84 -59
- package/src/fonts.css +2 -2
- package/src/forms.css +50 -50
- package/src/icons.css +10 -10
- package/src/index.css +1 -1
- package/src/layout.css +27 -27
- package/src/motion.css +16 -16
- package/src/motion.js +4 -4
- package/src/nav.js +5 -5
- package/src/navigation.css +62 -62
- package/src/overlays.css +14 -14
- package/src/rail.js +6 -6
- package/src/surfaces.css +11 -11
- package/src/tokens.css +14 -14
- package/tokens/index.js +8 -8
package/dist/css-inline.js.map
CHANGED
|
@@ -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,
|
|
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,gyzRAAgyzR,CAAA;AAEn0zR;;;yBAGyB;AACzB,MAAM,CAAC,MAAM,WAAW,GAAW,y3BAAy3B,CAAA"}
|
package/dist/data-table.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface DataTableProps<T> {
|
|
|
21
21
|
* d'absence qu'on attend ici (filtre trop étroit), pas l'écran d'absence :
|
|
22
22
|
* l'en-tête doit rester visible pour qu'on puisse élargir le filtre. */
|
|
23
23
|
vide?: ReactNode;
|
|
24
|
-
/** Appelé au clic sur une ligne. Sans lui, la ligne n'est pas cliquable
|
|
24
|
+
/** Appelé au clic sur une ligne. Sans lui, la ligne n'est pas cliquable :
|
|
25
25
|
* et elle ne doit pas en avoir l'air. */
|
|
26
26
|
onRowClick?: (ligne: T) => void;
|
|
27
27
|
className?: string;
|
package/dist/data.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export interface TableProps extends Div {
|
|
|
8
8
|
/** Tableau de PROSE : les cellules reviennent à la ligne au lieu de
|
|
9
9
|
* tronquer, et les colonnes s'alignent en haut.
|
|
10
10
|
*
|
|
11
|
-
* ⚠️ À employer dès qu'une cellule porte une phrase plutôt qu'une donnée
|
|
11
|
+
* ⚠️ À employer dès qu'une cellule porte une phrase plutôt qu'une donnée :
|
|
12
12
|
* une clause de contrat, un fondement juridique, une garantie de
|
|
13
13
|
* transfert. Tronquer une clause ne la raccourcit pas, ça la CACHE, et le
|
|
14
14
|
* lecteur n'a aucun moyen de savoir qu'il manque quelque chose. Le défaut
|
|
@@ -75,7 +75,7 @@ export interface MetaProps extends Span {
|
|
|
75
75
|
className?: string;
|
|
76
76
|
}
|
|
77
77
|
/** Second registre mono du système, en BAS DE CASSE : taille de fichier,
|
|
78
|
-
* date, horodatage, latence. Ni capitales ni interlettrage
|
|
78
|
+
* date, horodatage, latence. Ni capitales ni interlettrage : c'est ce qui le
|
|
79
79
|
* distingue de `Tag` et `Mono`, et une date en capitales espacées devient
|
|
80
80
|
* illisible. */
|
|
81
81
|
export declare function Meta({ taille, discret, className, ...reste }: MetaProps): import("react").JSX.Element;
|
|
@@ -136,7 +136,7 @@ export declare function CiteRow({ className, ...reste }: Div & {
|
|
|
136
136
|
}): import("react").JSX.Element;
|
|
137
137
|
export interface FileTypeProps extends Span {
|
|
138
138
|
/** Règle de choix relevée : DOCX si le type MIME contient « word »,
|
|
139
|
-
* PDF sinon. Les couleurs ne viennent PAS de la charte
|
|
139
|
+
* PDF sinon. Les couleurs ne viennent PAS de la charte : ce sont celles
|
|
140
140
|
* que le monde associe à ces formats. */
|
|
141
141
|
format: 'pdf' | 'docx';
|
|
142
142
|
className?: string;
|
|
@@ -145,7 +145,7 @@ export declare function FileType({ format, className, ...reste }: FileTypeProps)
|
|
|
145
145
|
export interface FoldProps extends Omit<DetailsHTMLAttributes<HTMLDetailsElement>, 'className' | 'open'> {
|
|
146
146
|
titre: ReactNode;
|
|
147
147
|
/** Ouverte au premier rendu. L'état vit ensuite dans le NAVIGATEUR
|
|
148
|
-
* (<details> natif) : pas de prop contrôlée, pas de JavaScript
|
|
148
|
+
* (<details> natif) : pas de prop contrôlée, pas de JavaScript, le
|
|
149
149
|
* clavier et l'annonce viennent avec. `open` est retiré des attributs :
|
|
150
150
|
* deux canaux pour le même état, et c'est le silencieux qui gagnerait. */
|
|
151
151
|
ouvert?: boolean;
|
|
@@ -153,11 +153,11 @@ export interface FoldProps extends Omit<DetailsHTMLAttributes<HTMLDetailsElement
|
|
|
153
153
|
children?: ReactNode;
|
|
154
154
|
}
|
|
155
155
|
/** Le pliage de l'applicatif : options avancées, détail d'une ligne de
|
|
156
|
-
* journal. La FAQ (contenu) reste le pliage de la VITRINE
|
|
156
|
+
* journal. La FAQ (contenu) reste le pliage de la VITRINE : question en
|
|
157
157
|
* 14px, respiration éditoriale ; celui-ci est un chrome dense. Le chevron
|
|
158
158
|
* fait partie du composant, comme la flèche de LinkArrow. */
|
|
159
159
|
export declare function Fold({ titre, ouvert, className, children, ...reste }: FoldProps): import("react").JSX.Element;
|
|
160
|
-
/** Une touche, une seule : « ⌘K » est DEUX touches, donc deux `Kbd
|
|
160
|
+
/** Une touche, une seule : « ⌘K » est DEUX touches, donc deux `Kbd`, les
|
|
161
161
|
* fondre dans une seule dessine une touche qui n'existe sur aucun
|
|
162
162
|
* clavier. */
|
|
163
163
|
export declare function Kbd({ className, ...reste }: Omit<HTMLAttributes<HTMLElement>, 'className'> & {
|
|
@@ -169,7 +169,7 @@ export declare function Code({ className, ...reste }: Omit<HTMLAttributes<HTMLEl
|
|
|
169
169
|
className?: string;
|
|
170
170
|
}): import("react").JSX.Element;
|
|
171
171
|
/** Bloc de code. Chasse fixe RÉELLE (--font-code) : --font-mono est
|
|
172
|
-
* proportionnelle et n'aligne pas du code. Aucune coloration syntaxique
|
|
172
|
+
* proportionnelle et n'aligne pas du code. Aucune coloration syntaxique :
|
|
173
173
|
* elle imposerait une palette entière que la charte n'a pas. Le bloc
|
|
174
174
|
* défile en son sein : une ligne longue ne pousse jamais la page. */
|
|
175
175
|
export declare function CodeBlock({ className, children, ...reste }: Omit<HTMLAttributes<HTMLPreElement>, 'className'> & {
|
package/dist/data.js
CHANGED
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { cx } from './cx.js';
|
|
3
3
|
/** `--zv-cols` est un PARAMÈTRE de grille, pas un token de marque : il se
|
|
4
4
|
* pose en style inline sur le cadre, et l'en-tête comme les lignes en
|
|
5
|
-
* héritent. Une seule déclaration pour les deux
|
|
5
|
+
* héritent. Une seule déclaration pour les deux : recopié aux deux
|
|
6
6
|
* endroits, on l'oublie à l'un et les intitulés se décalent des valeurs
|
|
7
7
|
* sans que rien ne casse visiblement. */
|
|
8
8
|
function cols(gabarit, style) {
|
|
@@ -46,7 +46,7 @@ export function ListName({ className, ...reste }) {
|
|
|
46
46
|
return _jsx("span", { className: cx('zv-list__name', className), ...reste });
|
|
47
47
|
}
|
|
48
48
|
/** Second registre mono du système, en BAS DE CASSE : taille de fichier,
|
|
49
|
-
* date, horodatage, latence. Ni capitales ni interlettrage
|
|
49
|
+
* date, horodatage, latence. Ni capitales ni interlettrage : c'est ce qui le
|
|
50
50
|
* distingue de `Tag` et `Mono`, et une date en capitales espacées devient
|
|
51
51
|
* illisible. */
|
|
52
52
|
export function Meta({ taille = 'normal', discret, className, ...reste }) {
|
|
@@ -96,14 +96,14 @@ export function FileType({ format, className, ...reste }) {
|
|
|
96
96
|
return (_jsx("span", { className: cx('zv-filetype', `zv-filetype--${format}`, className), ...reste, children: format.toUpperCase() }));
|
|
97
97
|
}
|
|
98
98
|
/** Le pliage de l'applicatif : options avancées, détail d'une ligne de
|
|
99
|
-
* journal. La FAQ (contenu) reste le pliage de la VITRINE
|
|
99
|
+
* journal. La FAQ (contenu) reste le pliage de la VITRINE : question en
|
|
100
100
|
* 14px, respiration éditoriale ; celui-ci est un chrome dense. Le chevron
|
|
101
101
|
* fait partie du composant, comme la flèche de LinkArrow. */
|
|
102
102
|
export function Fold({ titre, ouvert, className, children, ...reste }) {
|
|
103
103
|
return (_jsxs("details", { className: cx('zv-fold', className), open: ouvert, ...reste, children: [_jsxs("summary", { className: "zv-fold__titre", children: [titre, _jsx("svg", { className: "zv-fold__chevron", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "square", strokeLinejoin: "miter", "aria-hidden": "true", children: _jsx("path", { d: "M6.67 9.33 L12 14.67 L17.33 9.33" }) })] }), _jsx("div", { className: "zv-fold__corps", children: children })] }));
|
|
104
104
|
}
|
|
105
105
|
/* ─── Touche de clavier ────────────────────────────────────────────── */
|
|
106
|
-
/** Une touche, une seule : « ⌘K » est DEUX touches, donc deux `Kbd
|
|
106
|
+
/** Une touche, une seule : « ⌘K » est DEUX touches, donc deux `Kbd`, les
|
|
107
107
|
* fondre dans une seule dessine une touche qui n'existe sur aucun
|
|
108
108
|
* clavier. */
|
|
109
109
|
export function Kbd({ className, ...reste }) {
|
|
@@ -116,7 +116,7 @@ export function Code({ className, ...reste }) {
|
|
|
116
116
|
return _jsx("code", { className: cx('zv-code', className), ...reste });
|
|
117
117
|
}
|
|
118
118
|
/** Bloc de code. Chasse fixe RÉELLE (--font-code) : --font-mono est
|
|
119
|
-
* proportionnelle et n'aligne pas du code. Aucune coloration syntaxique
|
|
119
|
+
* proportionnelle et n'aligne pas du code. Aucune coloration syntaxique :
|
|
120
120
|
* elle imposerait une palette entière que la charte n'a pas. Le bloc
|
|
121
121
|
* défile en son sein : une ligne longue ne pousse jamais la page. */
|
|
122
122
|
export function CodeBlock({ className, children, ...reste }) {
|
package/dist/email-tokens.js
CHANGED
package/dist/email.d.ts
CHANGED
|
@@ -13,11 +13,11 @@ export declare function emailKicker(texte: string): string;
|
|
|
13
13
|
* tenue à l'ouverture. */
|
|
14
14
|
export declare function emailTitre(texte: string): string;
|
|
15
15
|
/** Un paragraphe. Le HTML d'enrichissement (`<strong>`, `<a>`) est admis :
|
|
16
|
-
* c'est du texte rédigé, pas une saisie utilisateur
|
|
16
|
+
* c'est du texte rédigé, pas une saisie utilisateur, l'échapper
|
|
17
17
|
* afficherait des chevrons. Passer par `echappe` toute valeur qui vient
|
|
18
18
|
* d'une base. */
|
|
19
19
|
export declare function emailTexte(html: string): string;
|
|
20
|
-
/** L'action. UN SEUL bouton plein par e-mail, comme par page
|
|
20
|
+
/** L'action. UN SEUL bouton plein par e-mail, comme par page : c'est ce qui
|
|
21
21
|
* fait qu'on sait où cliquer.
|
|
22
22
|
* Construit en table : le `padding` d'un `<a>` est ignoré par Outlook, qui
|
|
23
23
|
* rendrait un lien nu au milieu du message. Aplat indigo et non dégradé,
|
|
@@ -27,7 +27,7 @@ export declare function emailBouton({ href, libelle }: {
|
|
|
27
27
|
libelle: string;
|
|
28
28
|
}): string;
|
|
29
29
|
/** Le lien secondaire, sous le bouton : l'autre chemin, pour qui ne veut pas
|
|
30
|
-
* du premier. Souligné
|
|
30
|
+
* du premier. Souligné : dans un e-mail, la couleur seule ne suffit pas à
|
|
31
31
|
* annoncer un lien. */
|
|
32
32
|
export declare function emailLienSecondaire({ href, libelle }: {
|
|
33
33
|
href: string;
|
|
@@ -44,7 +44,7 @@ export interface EmailOptions {
|
|
|
44
44
|
* à l'envoi, dans l'en-tête SMTP. */
|
|
45
45
|
titre: string;
|
|
46
46
|
/** Le texte gris qui suit l'objet dans la liste des messages. Sans lui,
|
|
47
|
-
* le client y affiche les premiers mots du HTML
|
|
47
|
+
* le client y affiche les premiers mots du HTML : souvent « Voir cet
|
|
48
48
|
* e-mail dans votre navigateur », ce qui gâche la seule ligne dont on
|
|
49
49
|
* dispose pour convaincre d'ouvrir. */
|
|
50
50
|
preheader?: string;
|
|
@@ -52,7 +52,7 @@ export interface EmailOptions {
|
|
|
52
52
|
* un logo : une image sur deux est bloquée par défaut, et un e-mail qui
|
|
53
53
|
* ne dit pas de qui il vient part à la corbeille. */
|
|
54
54
|
marque: string;
|
|
55
|
-
/** L'URL ABSOLUE du logo
|
|
55
|
+
/** L'URL ABSOLUE du logo : une image d'e-mail ne se résout pas depuis un
|
|
56
56
|
* chemin relatif, et les data-URI sont bloquées par Gmail. */
|
|
57
57
|
logo?: {
|
|
58
58
|
src: string;
|
|
@@ -73,7 +73,7 @@ export interface EmailOptions {
|
|
|
73
73
|
*
|
|
74
74
|
* ⚠️ Le mode sombre est REFUSÉ explicitement (`color-scheme: light`) : la
|
|
75
75
|
* charte est claire par nature, et l'inversion automatique d'Apple Mail
|
|
76
|
-
* retourne les neutres sans toucher aux aplats
|
|
76
|
+
* retourne les neutres sans toucher aux aplats, l'indigo du bouton
|
|
77
77
|
* resterait sur un fond devenu noir, et les contrastes réglés dans un sens
|
|
78
78
|
* partiraient dans l'autre. C'est la même règle que pour les surfaces
|
|
79
79
|
* sombres du système : elles se font avec la bande manifeste, jamais en
|
package/dist/email.js
CHANGED
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
// · il n'y a pas de feuille de style à charger dans un e-mail ;
|
|
9
9
|
// · Outlook et Gmail SUPPRIMENT les propriétés personnalisées : un
|
|
10
10
|
// `var(--accent)` s'y rend en couleur nulle, donc en texte noir sur fond
|
|
11
|
-
// transparent. Les valeurs sont donc écrites en clair
|
|
11
|
+
// transparent. Les valeurs sont donc écrites en clair : mais tirées du
|
|
12
12
|
// miroir JS des tokens, que tests/tokens.test.js tient aligné sur le CSS ;
|
|
13
13
|
// · ni flexbox ni grid ne sont fiables : la mise en page est en TABLES ;
|
|
14
|
-
// · les dégradés ne se rendent pas dans Outlook
|
|
14
|
+
// · les dégradés ne se rendent pas dans Outlook : le bouton plein perd le
|
|
15
15
|
// sien et devient un aplat, le filet de spectre devient trois aplats.
|
|
16
16
|
//
|
|
17
17
|
// Il vit dans react/ parce que c'est la racine de compilation du paquet
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
// s'affichera pas. Ne pas y ajouter de classes en espérant qu'elles soient
|
|
23
23
|
// stylées.
|
|
24
24
|
import { COULEURS, POLICES as PILES } from './email-tokens.js';
|
|
25
|
-
// Les URL publiques des glyphes
|
|
25
|
+
// Les URL publiques des glyphes, sept chaînes, aucune image inlinée : un
|
|
26
26
|
// client de messagerie ne résout pas une data-URI (Gmail les bloque), il lui
|
|
27
27
|
// faut une adresse absolue.
|
|
28
28
|
import { LOGOS_PRODUITS } from './glyph-urls.js';
|
|
@@ -32,7 +32,7 @@ export { BASE_RESSOURCES, LOGOS_PRODUITS } from './glyph-urls.js';
|
|
|
32
32
|
* délimité par ces mêmes guillemets : l'attribut se refermerait au premier
|
|
33
33
|
* guillemet interne, et TOUT le style du nœud serait perdu. En HTML, un
|
|
34
34
|
* guillemet simple est équivalent à l'intérieur d'une valeur de police.
|
|
35
|
-
* Cette faute ne se voit pas à la relecture
|
|
35
|
+
* Cette faute ne se voit pas à la relecture : elle se voit au rendu, où
|
|
36
36
|
* l'e-mail entier repasse en Times sans style. */
|
|
37
37
|
const pourAttribut = (pile) => pile.replace(/"/g, "'");
|
|
38
38
|
const POLICES = {
|
|
@@ -75,13 +75,13 @@ export function emailTitre(texte) {
|
|
|
75
75
|
return `<h1 style="${TITRE}font-size:26px;line-height:1.2;margin:0 0 18px;">${echappe(texte)}</h1>`;
|
|
76
76
|
}
|
|
77
77
|
/** Un paragraphe. Le HTML d'enrichissement (`<strong>`, `<a>`) est admis :
|
|
78
|
-
* c'est du texte rédigé, pas une saisie utilisateur
|
|
78
|
+
* c'est du texte rédigé, pas une saisie utilisateur, l'échapper
|
|
79
79
|
* afficherait des chevrons. Passer par `echappe` toute valeur qui vient
|
|
80
80
|
* d'une base. */
|
|
81
81
|
export function emailTexte(html) {
|
|
82
82
|
return `<p style="${CORPS}margin:0 0 16px;">${html}</p>`;
|
|
83
83
|
}
|
|
84
|
-
/** L'action. UN SEUL bouton plein par e-mail, comme par page
|
|
84
|
+
/** L'action. UN SEUL bouton plein par e-mail, comme par page : c'est ce qui
|
|
85
85
|
* fait qu'on sait où cliquer.
|
|
86
86
|
* Construit en table : le `padding` d'un `<a>` est ignoré par Outlook, qui
|
|
87
87
|
* rendrait un lien nu au milieu du message. Aplat indigo et non dégradé,
|
|
@@ -93,7 +93,7 @@ export function emailBouton({ href, libelle }) {
|
|
|
93
93
|
</td></tr></table>`;
|
|
94
94
|
}
|
|
95
95
|
/** Le lien secondaire, sous le bouton : l'autre chemin, pour qui ne veut pas
|
|
96
|
-
* du premier. Souligné
|
|
96
|
+
* du premier. Souligné : dans un e-mail, la couleur seule ne suffit pas à
|
|
97
97
|
* annoncer un lien. */
|
|
98
98
|
export function emailLienSecondaire({ href, libelle }) {
|
|
99
99
|
return `<p style="${CORPS}font-size:14px;margin:0 0 16px;"><a href="${echappe(href)}" style="color:${COULEURS.accent};text-decoration:underline;">${echappe(libelle)}</a></p>`;
|
|
@@ -118,7 +118,7 @@ export function emailFilet() {
|
|
|
118
118
|
*
|
|
119
119
|
* ⚠️ Le mode sombre est REFUSÉ explicitement (`color-scheme: light`) : la
|
|
120
120
|
* charte est claire par nature, et l'inversion automatique d'Apple Mail
|
|
121
|
-
* retourne les neutres sans toucher aux aplats
|
|
121
|
+
* retourne les neutres sans toucher aux aplats, l'indigo du bouton
|
|
122
122
|
* resterait sur un fond devenu noir, et les contrastes réglés dans un sens
|
|
123
123
|
* partiraient dans l'autre. C'est la même règle que pour les surfaces
|
|
124
124
|
* sombres du système : elles se font avec la bande manifeste, jamais en
|
package/dist/email.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../react/email.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,qEAAqE;AACrE,+DAA+D;AAC/D,EAAE;AACF,kEAAkE;AAClE,qEAAqE;AACrE,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;AAC/E,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,EAAE;AACF,wEAAwE;AACxE,yEAAyE;AACzE,uCAAuC;AACvC,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,WAAW;AAEX,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9D,
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../react/email.ts"],"names":[],"mappings":"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"}
|
package/dist/feedback.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export interface AlertProps extends Div {
|
|
|
6
6
|
/** OBLIGATOIRE : sans ton, le bandeau hérite d'un filet en `currentColor`,
|
|
7
7
|
* soit un trait d'encre autour d'un fond blanc. */
|
|
8
8
|
ton: AlertTon;
|
|
9
|
-
/** `sm` resserre, `lg` amplifie
|
|
9
|
+
/** `sm` resserre, `lg` amplifie : ce dernier pour le message qui REMPLACE
|
|
10
10
|
* un contenu attendu (incident, réponse impossible). */
|
|
11
11
|
taille?: 'sm' | 'normal' | 'lg';
|
|
12
12
|
className?: string;
|
|
@@ -28,8 +28,8 @@ export interface BadgeProps extends Span {
|
|
|
28
28
|
export declare function Badge({ ton, gabarit, pastille, className, children, ...reste }: BadgeProps): import("react").JSX.Element;
|
|
29
29
|
export type DotEtat = 'recu' | 'ocr' | 'indexation' | 'indexe' | 'ok' | 'erreur';
|
|
30
30
|
export interface DotProps extends Span {
|
|
31
|
-
/** Sans état, la pastille reste GRISE : un statut inconnu
|
|
32
|
-
* serveur, pas encore côté interface
|
|
31
|
+
/** Sans état, la pastille reste GRISE : un statut inconnu (ajouté côté
|
|
32
|
+
* serveur, pas encore côté interface) ne doit pas passer pour un succès. */
|
|
33
33
|
etat?: DotEtat;
|
|
34
34
|
taille?: 'sm' | 'normal' | 'lg';
|
|
35
35
|
/** CARRÉE : marque une SOURCE, pas un état. Ne pas uniformiser. */
|
|
@@ -77,7 +77,7 @@ export interface ProgressProps extends Div {
|
|
|
77
77
|
/** Entre 0 et 1. Hors bornes, la valeur est ramenée dedans : une barre à
|
|
78
78
|
* 140 % déborde de son cadre. */
|
|
79
79
|
valeur: number;
|
|
80
|
-
/** Ce que la barre mesure
|
|
80
|
+
/** Ce que la barre mesure : annoncé, jamais dessiné. */
|
|
81
81
|
label?: string;
|
|
82
82
|
className?: string;
|
|
83
83
|
}
|
|
@@ -88,13 +88,13 @@ export interface SpinnerProps extends Span {
|
|
|
88
88
|
/** En tête d'un panneau d'attente : la roue seule, plus grande. */
|
|
89
89
|
grand?: boolean;
|
|
90
90
|
/** Ce qu'on attend, annoncé au lecteur d'écran. Sans lui la roue est
|
|
91
|
-
* DÉCORATIVE et masquée
|
|
91
|
+
* DÉCORATIVE et masquée : le bon défaut quand une phrase voisine dit
|
|
92
92
|
* déjà le travail (`Loading`, ou le libellé d'un bouton `occupe`). */
|
|
93
93
|
label?: string;
|
|
94
94
|
className?: string;
|
|
95
95
|
}
|
|
96
96
|
/** Attente COURTE ET LOCALE : un bouton, une cellule, un panneau sans la
|
|
97
|
-
* place d'une phrase. Pour l'attente d'un écran, préférer `Loading`
|
|
97
|
+
* place d'une phrase. Pour l'attente d'un écran, préférer `Loading` : la
|
|
98
98
|
* phrase qui dit le travail réel reste le motif par défaut du système.
|
|
99
99
|
* Le libellé est un TEXTE masqué visuellement, pas un aria-label : sur un
|
|
100
100
|
* span vide, l'aria-label n'est pas annoncé par tous les lecteurs. */
|
|
@@ -108,17 +108,17 @@ export interface SkeletonProps extends Div {
|
|
|
108
108
|
hauteur?: number | string;
|
|
109
109
|
className?: string;
|
|
110
110
|
}
|
|
111
|
-
/** Il ANNONCE une structure connue (la carte, la ligne qui va venir)
|
|
111
|
+
/** Il ANNONCE une structure connue (la carte, la ligne qui va venir) : pour
|
|
112
112
|
* un contenu dont la forme est inconnue, c'est `Loading` qui dit ce cas.
|
|
113
113
|
* Le squelette est masqué aux lecteurs d'écran : c'est la zone qui charge
|
|
114
114
|
* qui porte aria-busy, pas chaque os. */
|
|
115
115
|
export declare function Skeleton({ texte, largeur, hauteur, className, style, ...reste }: SkeletonProps): import("react").JSX.Element;
|
|
116
116
|
export interface TooltipProps extends Span {
|
|
117
|
-
/** Le complément
|
|
117
|
+
/** Le complément : un raccourci, une date exacte, une unité. JAMAIS le
|
|
118
118
|
* nom de la commande : lui vit sur la cible (libellé ou aria-label), une
|
|
119
119
|
* infobulle n'existe pas au doigt. */
|
|
120
120
|
contenu: ReactNode;
|
|
121
|
-
/** Identifiant EXPLICITE, à répéter en `aria-describedby` sur la cible
|
|
121
|
+
/** Identifiant EXPLICITE, à répéter en `aria-describedby` sur la cible,
|
|
122
122
|
* le contrat du couple htmlFor/id de Field, pour la même raison : pas de
|
|
123
123
|
* useId, le composant reste rendu au serveur. */
|
|
124
124
|
id?: string;
|
|
@@ -130,7 +130,7 @@ export interface TooltipProps extends Span {
|
|
|
130
130
|
children?: ReactNode;
|
|
131
131
|
}
|
|
132
132
|
/** Échap ferme la bulle jusqu'au blur (WCAG 1.4.13) : la classe est posée
|
|
133
|
-
* sur le nœud sans état React
|
|
133
|
+
* sur le nœud sans état React, le composant reste rendu au serveur, et
|
|
134
134
|
* sans script la bulle reste simplement au comportement survol/focus. */
|
|
135
135
|
export declare function Tooltip({ contenu, id, bas, className, children, ...reste }: TooltipProps): import("react").JSX.Element;
|
|
136
136
|
export {};
|
package/dist/feedback.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../react/feedback.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtD,KAAK,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,CAAA;AAC5D,KAAK,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,CAAA;AAI9D,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAE9D,MAAM,WAAW,UAAW,SAAQ,GAAG;IACrC;wDACoD;IACpD,GAAG,EAAE,QAAQ,CAAA;IACb;6DACyD;IACzD,MAAM,CAAC,EAAE,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,KAAK,CAAC,EAAE,GAAG,EAAE,MAAiB,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,+BAchF;AAID,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,CAAA;AAElE,MAAM,WAAW,UAAW,SAAQ,IAAI;IACtC,GAAG,CAAC,EAAE,QAAQ,CAAA;IACd;mDAC+C;IAC/C,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED;8DAC8D;AAC9D,wBAAgB,KAAK,CAAC,EACpB,GAAc,EACd,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,UAAU,+BAiBZ;AAID,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAA;AAEhF,MAAM,WAAW,QAAS,SAAQ,IAAI;IACpC;
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../react/feedback.tsx"],"names":[],"mappings":"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"}
|
package/dist/feedback.js
CHANGED
|
@@ -36,14 +36,14 @@ export function Progress({ valeur, label, className, ...reste }) {
|
|
|
36
36
|
return (_jsx("div", { role: "progressbar", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(part * 100), "aria-label": label, className: cx('zv-progress', className), ...reste, children: _jsx("div", { className: "zv-progress__fill", style: { width: `${part * 100}%` } }) }));
|
|
37
37
|
}
|
|
38
38
|
/** Attente COURTE ET LOCALE : un bouton, une cellule, un panneau sans la
|
|
39
|
-
* place d'une phrase. Pour l'attente d'un écran, préférer `Loading`
|
|
39
|
+
* place d'une phrase. Pour l'attente d'un écran, préférer `Loading` : la
|
|
40
40
|
* phrase qui dit le travail réel reste le motif par défaut du système.
|
|
41
41
|
* Le libellé est un TEXTE masqué visuellement, pas un aria-label : sur un
|
|
42
42
|
* span vide, l'aria-label n'est pas annoncé par tous les lecteurs. */
|
|
43
43
|
export function Spinner({ grand, label, className, ...reste }) {
|
|
44
44
|
return (_jsx("span", { role: label ? 'status' : undefined, "aria-hidden": label ? undefined : true, className: cx('zv-spinner', grand && 'zv-spinner--lg', className), ...reste, children: label && _jsx("span", { className: "zv-sr-only", children: label }) }));
|
|
45
45
|
}
|
|
46
|
-
/** Il ANNONCE une structure connue (la carte, la ligne qui va venir)
|
|
46
|
+
/** Il ANNONCE une structure connue (la carte, la ligne qui va venir) : pour
|
|
47
47
|
* un contenu dont la forme est inconnue, c'est `Loading` qui dit ce cas.
|
|
48
48
|
* Le squelette est masqué aux lecteurs d'écran : c'est la zone qui charge
|
|
49
49
|
* qui porte aria-busy, pas chaque os. */
|
|
@@ -51,7 +51,7 @@ export function Skeleton({ texte, largeur, hauteur, className, style, ...reste }
|
|
|
51
51
|
return (_jsx("div", { "aria-hidden": "true", className: cx('zv-skeleton', texte && 'zv-skeleton--text', className), style: { width: largeur, height: hauteur, ...style }, ...reste }));
|
|
52
52
|
}
|
|
53
53
|
/** Échap ferme la bulle jusqu'au blur (WCAG 1.4.13) : la classe est posée
|
|
54
|
-
* sur le nœud sans état React
|
|
54
|
+
* sur le nœud sans état React, le composant reste rendu au serveur, et
|
|
55
55
|
* sans script la bulle reste simplement au comportement survol/focus. */
|
|
56
56
|
export function Tooltip({ contenu, id, bas, className, children, ...reste }) {
|
|
57
57
|
return (_jsxs("span", { className: cx('zv-tooltip-hit', className), onKeyDown: (e) => {
|
package/dist/forms.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ButtonHTMLAttributes, HTMLAttributes, InputHTMLAttributes, ReactNode, SelectHTMLAttributes, TextareaHTMLAttributes } from 'react';
|
|
2
2
|
export interface FieldProps extends Omit<HTMLAttributes<HTMLDivElement>, 'className'> {
|
|
3
3
|
label?: ReactNode;
|
|
4
|
-
/** Identifiant du contrôle enveloppé
|
|
4
|
+
/** Identifiant du contrôle enveloppé : à répéter en `id` sur le contrôle. */
|
|
5
5
|
htmlFor?: string;
|
|
6
6
|
/** Posé à droite de l'intitulé, sur la même ligne de base
|
|
7
7
|
* (« Mot de passe oublié ? »). */
|
|
@@ -22,7 +22,7 @@ export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
|
|
|
22
22
|
/** Ni fond ni filet : c'est le CADRE qui l'entoure qui fait le champ.
|
|
23
23
|
* Lui laisser sa bordure dessinerait deux cadres imbriqués. */
|
|
24
24
|
nu?: boolean;
|
|
25
|
-
/** Pose `aria-invalid`
|
|
25
|
+
/** Pose `aria-invalid` : c'est lui qui rend l'erreur audible, et le CSS le
|
|
26
26
|
* suit autant que la classe. */
|
|
27
27
|
erreur?: boolean;
|
|
28
28
|
className?: string;
|
|
@@ -34,7 +34,7 @@ export interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaE
|
|
|
34
34
|
}
|
|
35
35
|
export declare function Textarea({ erreur, className, ...reste }: TextareaProps): import("react").JSX.Element;
|
|
36
36
|
/** <select> NATIF habillé comme le champ : la flèche, l'ouverture au clavier
|
|
37
|
-
* et l'annonce viennent du navigateur. C'est le motif de choix par défaut
|
|
37
|
+
* et l'annonce viennent du navigateur. C'est le motif de choix par défaut :
|
|
38
38
|
* `SelectTrigger` est un menu maison, à réserver aux filtres. */
|
|
39
39
|
export declare function Select({ className, ...reste }: Omit<SelectHTMLAttributes<HTMLSelectElement>, 'className'> & {
|
|
40
40
|
className?: string;
|
|
@@ -69,7 +69,7 @@ export declare function Radio({ className, ...reste }: Omit<InputHTMLAttributes<
|
|
|
69
69
|
export interface SwitchProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'onChange'> {
|
|
70
70
|
/** État courant. Composant CONTRÔLÉ : il ne mémorise rien. */
|
|
71
71
|
on: boolean;
|
|
72
|
-
/** Libellé accolé
|
|
72
|
+
/** Libellé accolé : c'est lui qui porte le sens, la piste seule ne dit pas
|
|
73
73
|
* ce qui est activé. */
|
|
74
74
|
texte?: ReactNode;
|
|
75
75
|
className?: string;
|
|
@@ -119,26 +119,26 @@ export declare function DropInput({ className, ...reste }: Omit<InputHTMLAttribu
|
|
|
119
119
|
}): import("react").JSX.Element;
|
|
120
120
|
export interface InputAffixProps extends Omit<HTMLAttributes<HTMLDivElement>, 'className'> {
|
|
121
121
|
/** Préfixe, en mono label : « € », « HT ». Une unité est un libellé, pas
|
|
122
|
-
* une donnée
|
|
122
|
+
* une donnée : elle ne se saisit pas, elle qualifie ce qui est saisi. */
|
|
123
123
|
avant?: ReactNode;
|
|
124
124
|
/** Suffixe : « JOURS », « / MOIS », « .zevra.tech ». */
|
|
125
125
|
apres?: ReactNode;
|
|
126
126
|
/** Identifiants EXPLICITES des affixes, à citer dans `aria-describedby`
|
|
127
|
-
* sur le champ intérieur
|
|
127
|
+
* sur le champ intérieur, le contrat htmlFor/id de `Field`, pour la
|
|
128
128
|
* même raison : pas de useId, le composant reste rendu au serveur.
|
|
129
129
|
* ⚠️ Sans ce câblage, un lecteur d'écran en mode formulaire entend
|
|
130
|
-
* « 1200 » sans jamais apprendre qu'il s'agit d'euros HT
|
|
130
|
+
* « 1200 » sans jamais apprendre qu'il s'agit d'euros HT : exactement le
|
|
131
131
|
* défaut que le composant existe pour corriger. */
|
|
132
132
|
idAvant?: string;
|
|
133
133
|
idApres?: string;
|
|
134
134
|
className?: string;
|
|
135
|
-
/** Le champ lui-même
|
|
135
|
+
/** Le champ lui-même, un `<Input nu>` : c'est le CADRE qui fait le champ,
|
|
136
136
|
* un `<Input>` bordé dessinerait deux cadres imbriqués. */
|
|
137
137
|
children?: ReactNode;
|
|
138
138
|
}
|
|
139
139
|
/** Cadre à affixe : « 30 », seul dans un champ, ne dit pas s'il s'agit de
|
|
140
140
|
* jours ou d'euros. Même grammaire que `Search` (cadre + champ nu) ; à ne
|
|
141
|
-
* pas employer quand l'unité est déjà dans l'intitulé du champ
|
|
141
|
+
* pas employer quand l'unité est déjà dans l'intitulé du champ : deux fois
|
|
142
142
|
* la même unité se lisent comme deux informations. */
|
|
143
143
|
export declare function InputAffix({ avant, apres, idAvant, idApres, className, children, ...reste }: InputAffixProps): import("react").JSX.Element;
|
|
144
144
|
export interface RangeProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'className' | 'type'> {
|
|
@@ -146,7 +146,7 @@ export interface RangeProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
|
|
|
146
146
|
}
|
|
147
147
|
/** Curseur natif habillé (`<input type="range">`) : clavier, annonce et
|
|
148
148
|
* bornes viennent du navigateur. Le remplissage de la piste est calculé
|
|
149
|
-
* ici depuis value/min/max
|
|
149
|
+
* ici depuis value/min/max : une géométrie, comme la largeur de
|
|
150
150
|
* `Progress`, pas une valeur de charte. En NON contrôlé, il reflète la
|
|
151
151
|
* valeur initiale et ne suit plus le doigt : contrôler le champ dès que le
|
|
152
152
|
* remplissage doit suivre.
|
|
@@ -171,8 +171,8 @@ export interface InputPasswordProps extends Omit<InputHTMLAttributes<HTMLInputEl
|
|
|
171
171
|
* l'appelant, qui est déjà un composant client puisqu'il tient la valeur du
|
|
172
172
|
* champ. Le paquet ne tire pas React côté navigateur pour un champ.
|
|
173
173
|
*
|
|
174
|
-
* Le libellé du bouton change avec l'état
|
|
175
|
-
* va se passer
|
|
174
|
+
* Le libellé du bouton change avec l'état, une icône seule ne dit pas ce qui
|
|
175
|
+
* va se passer, et `aria-pressed` l'annonce aux lecteurs d'écran.
|
|
176
176
|
*/
|
|
177
177
|
export declare function InputPassword({ visible, onBascule, className, ...reste }: InputPasswordProps): import("react").JSX.Element;
|
|
178
178
|
//# sourceMappingURL=forms.d.ts.map
|
package/dist/forms.js
CHANGED
|
@@ -12,7 +12,7 @@ export function Textarea({ erreur, className, ...reste }) {
|
|
|
12
12
|
return (_jsx("textarea", { className: cx('zv-textarea', className), "aria-invalid": erreur || undefined, ...reste }));
|
|
13
13
|
}
|
|
14
14
|
/** <select> NATIF habillé comme le champ : la flèche, l'ouverture au clavier
|
|
15
|
-
* et l'annonce viennent du navigateur. C'est le motif de choix par défaut
|
|
15
|
+
* et l'annonce viennent du navigateur. C'est le motif de choix par défaut :
|
|
16
16
|
* `SelectTrigger` est un menu maison, à réserver aux filtres. */
|
|
17
17
|
export function Select({ className, ...reste }) {
|
|
18
18
|
return _jsx("select", { className: cx('zv-input', 'zv-input--select', className), ...reste });
|
|
@@ -60,14 +60,14 @@ export function DropInput({ className, ...reste }) {
|
|
|
60
60
|
}
|
|
61
61
|
/** Cadre à affixe : « 30 », seul dans un champ, ne dit pas s'il s'agit de
|
|
62
62
|
* jours ou d'euros. Même grammaire que `Search` (cadre + champ nu) ; à ne
|
|
63
|
-
* pas employer quand l'unité est déjà dans l'intitulé du champ
|
|
63
|
+
* pas employer quand l'unité est déjà dans l'intitulé du champ : deux fois
|
|
64
64
|
* la même unité se lisent comme deux informations. */
|
|
65
65
|
export function InputAffix({ avant, apres, idAvant, idApres, className, children, ...reste }) {
|
|
66
66
|
return (_jsxs("div", { className: cx('zv-affix', className), ...reste, children: [avant != null && (_jsx("span", { className: "zv-affix__add", id: idAvant, children: avant })), children, apres != null && (_jsx("span", { className: "zv-affix__add", id: idApres, children: apres }))] }));
|
|
67
67
|
}
|
|
68
68
|
/** Curseur natif habillé (`<input type="range">`) : clavier, annonce et
|
|
69
69
|
* bornes viennent du navigateur. Le remplissage de la piste est calculé
|
|
70
|
-
* ici depuis value/min/max
|
|
70
|
+
* ici depuis value/min/max : une géométrie, comme la largeur de
|
|
71
71
|
* `Progress`, pas une valeur de charte. En NON contrôlé, il reflète la
|
|
72
72
|
* valeur initiale et ne suit plus le doigt : contrôler le champ dès que le
|
|
73
73
|
* remplissage doit suivre.
|
|
@@ -93,8 +93,8 @@ export function Range({ className, style, min, max, value, defaultValue, ...rest
|
|
|
93
93
|
* l'appelant, qui est déjà un composant client puisqu'il tient la valeur du
|
|
94
94
|
* champ. Le paquet ne tire pas React côté navigateur pour un champ.
|
|
95
95
|
*
|
|
96
|
-
* Le libellé du bouton change avec l'état
|
|
97
|
-
* va se passer
|
|
96
|
+
* Le libellé du bouton change avec l'état, une icône seule ne dit pas ce qui
|
|
97
|
+
* va se passer, et `aria-pressed` l'annonce aux lecteurs d'écran.
|
|
98
98
|
*/
|
|
99
99
|
export function InputPassword({ visible, onBascule, className, ...reste }) {
|
|
100
100
|
return (_jsxs("div", { className: cx('zv-affix', className), children: [_jsx("input", { type: visible ? 'text' : 'password', className: "zv-input zv-input--bare", ...reste }), onBascule && (_jsx("button", { type: "button", className: "zv-affix__btn", onClick: onBascule, "aria-pressed": visible ?? false, "aria-label": visible ? 'Masquer le mot de passe' : 'Afficher le mot de passe', title: visible ? 'Masquer le mot de passe' : 'Afficher le mot de passe', children: _jsx(Icon, { nom: visible ? 'oeil-barre' : 'oeil', taille: "sm" }) }))] }));
|
package/dist/glyph-data.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export type GlypheId = 'campus' | 'lexform' | 'mcp' | 'memoire' | 'plume' | 'supernovia' | 'zevra';
|
|
2
2
|
/** Les glyphes couleur des produits, inlinés en data-URI. */
|
|
3
3
|
export declare const GLYPHES: Record<GlypheId, string>;
|
|
4
|
-
/** Le mot « Zevra »
|
|
4
|
+
/** Le mot « Zevra » : le wordmark officiel, tracé, en data-URI. */
|
|
5
5
|
export declare const MOT_ZEVRA = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NTMuOCAxMDAiIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iWmV2cmEiPgogIDx0aXRsZT5aZXZyYTwvdGl0bGU+CiAgPCEtLSBMZSBtb3QgWmV2cmEsIHJlbGV2w6kgc3VyIGxlIGxvY2t1cCBkJ29yaWdpbmUuIExhIGhhdXRldXIgZGUgY2FwaXRhbGUKICAgICAgIHZhdXQgMTAwIHVuaXTDqXMgOiB1bmUgaGF1dGV1ciBDU1MgcG9zw6llIHN1ciBjZSBmaWNoaWVyIEVTVCBsYSBjYXBpdGFsZSwKICAgICAgIGNlIHF1aSByZW5kIGxlcyBwcm9wb3J0aW9ucyBkdSBsb2NrdXAgY2FsY3VsYWJsZXMgKHZvaXIgLnp2LWxvY2t1cCkuIC0tPgogIDxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNIDQxMy4zMSAwLjE4IEwgNDEzLjg1IDAuMTggTCA0MTQuMjEgMC4wMCBMIDQxNC43NCAwLjAwIEwgNDE1LjI4IDAuMDAgTCA0MTUuODEgMC4wMCBMIDQxNi4zNSAwLjAwIEwgNDE2Ljg4IDAuMDAgTCA0MTcuNDIgMC4wMCBMIDQxNy45NiAwLjAwIEwgNDE4LjQ5IDAuMDAgTCA0MTkuMDMgMC4wMCBMIDQxOS41NiAwLjAwIEwgNDIwLjEwIDAuMDAgTCA0MjAuNjMgMC4wMCBMIDQyMC45OSAwLjE4IEwgNDIxLjM1IDAuMzYgTCA0MjEuNzEgMC4zNiBMIDQ1My44MCA4MC4yOCBMIDQ0MS44MyA4NS4wNiBMIDQzMi41NyA2MS43NyBMIDQwMi40OSA2MS43NyBMIDM5My4xOSA4NS4wMiBMIDM4MS4yMiA4MC4zMCBaIE0gMC4xOCA4MC44OCBMIDQ4Ljg2IDEzLjIxIEwgNy4zMiAxMi44NSBMIDYuOTYgMTIuMzIgTCA2Ljk2IDExLjQzIEwgNi45NiAxMC41MyBMIDYuOTYgOS42NCBMIDYuOTYgOC43NSBMIDYuOTYgNy44NiBMIDYuOTYgNi45NiBMIDYuOTYgNi4wNyBMIDYuOTYgNS4xOCBMIDYuOTYgNC4yOCBMIDYuOTYgMy4zOSBMIDYuOTYgMi41MCBMIDYuOTYgMS42MSBMIDcuMTQgMC44OSBMIDcuMzIgMC41NCBMIDc0LjA4IDAuMTggTCAxOS41MCA3Ni4wNiBMIDYxLjA2IDc2LjU5IEwgNjEuMjQgNzcuMzEgTCA2MS40MiA3OC4wMiBMIDYxLjQyIDc4LjkxIEwgNjEuNDIgNzkuODEgTCA2MS40MiA4MC43MCBMIDYxLjQyIDgxLjU5IEwgNjEuNDIgODIuNDggTCA2MS40MiA4My4zOCBMIDYxLjQyIDg0LjI3IEwgNjEuNDIgODUuMTYgTCA2MS40MiA4Ni4wNSBMIDYxLjQyIDg2Ljk1IEwgNjEuNDIgODcuODQgTCA2MS4wNiA4OC4zOCBMIDYxLjA2IDg4LjczIEwgMC4zNiA4OC43MyBMIDAuMTggODguMzggTCAwLjAwIDg4LjAyIEwgMC4wMCA4Ny40OCBMIDAuMDAgODYuOTUgTCAwLjAwIDg2LjQxIEwgMC4wMCA4NS44OCBMIDAuMDAgODUuMzQgTCAwLjAwIDg0LjgxIEwgMC4wMCA4NC4yNyBMIDAuMDAgODMuNzMgTCAwLjAwIDgzLjIwIEwgMC4wMCA4Mi42NiBMIDAuMDAgODIuMTMgTCAwLjAwIDgxLjU5IEwgMC4xOCA4MS4yMyBaIE0gOTYuMjMgMC41NCBMIDE1MC41MSAwLjcxIEwgMTUwLjY5IDEuNDMgTCAxNTAuODYgMi4xNCBMIDE1MC44NiAzLjA0IEwgMTUwLjg2IDMuOTMgTCAxNTAuODYgNC44MiBMIDE1MC44NiA1LjcxIEwgMTUwLjg2IDYuNjEgTCAxNTAuODYgNy41MCBMIDE1MC44NiA4LjM5IEwgMTUwLjg2IDkuMjggTCAxNTAuODYgMTAuMTggTCAxNTAuODYgMTEuMDcgTCAxNTAuODYgMTEuOTYgTCAxNTAuNTEgMTIuNTAgTCAxNTAuNTEgMTIuNjggTCAxMDkuMDkgMTMuMzkgTCAxMDguNzMgMTQuODIgTCAxMDguNzMgMTYuMjUgTCAxMDguNzMgMTguMDMgTCAxMDguNzMgMTkuODIgTCAxMDguNzMgMjEuNjAgTCAxMDguNzMgMjMuMzkgTCAxMDguNzMgMjUuMTcgTCAxMDguNzMgMjYuOTYgTCAxMDguNzMgMjguNzQgTCAxMDguNzMgMzAuNTMgTCAxMDguNzMgMzIuMzIgTCAxMDguNzMgMzQuMTAgTCAxMDguNzMgMzUuODkgTCAxMDguOTEgMzcuNDkgTCAxMDkuMDkgMzguMjEgTCAxNDMuMjIgMzguMzkgTCAxNDMuMTEgNTEuMjQgTCAxMDkuMDkgNTEuNDIgTCAxMDguNzMgNTIuODUgTCAxMDguNzMgNTQuNjMgTCAxMDguNzMgNTYuNDIgTCAxMDguNzMgNTguMjAgTCAxMDguNzMgNTkuOTkgTCAxMDguNzMgNjEuNzcgTCAxMDguNzMgNjMuNTYgTCAxMDguNzMgNjUuMzQgTCAxMDguNzMgNjcuMTMgTCAxMDguNzMgNjguOTIgTCAxMDguNzMgNzAuNzAgTCAxMDguNzMgNzIuNDkgTCAxMDguNzMgNzQuMjcgTCAxMDkuMDkgNzUuNzAgTCAxMDkuMDkgNzUuODggTCAxNTAuMTUgNzYuNTkgTCAxNTAuNTEgNzcuMTMgTCAxNTAuODYgNzcuNjYgTCAxNTAuODYgNzguNTYgTCAxNTAuODYgNzkuNDUgTCAxNTAuODYgODAuMzQgTCAxNTAuODYgODEuMjMgTCAxNTAuODYgODIuMTMgTCAxNTAuODYgODMuMDIgTCAxNTAuODYgODMuOTEgTCAxNTAuODYgODQuODEgTCAxNTAuODYgODUuNzAgTCAxNTAuODYgODYuNTkgTCAxNTAuODYgODcuNDggTCAxNTAuNjkgODguMjAgTCAxNTAuNjkgODguMzggTCA5Ni40MSA4OC45MSBMIDk1Ljg3IDgzLjU2IEwgOTUuODcgNzcuMzEgTCA5NS44NyA3MS4wNiBMIDk1Ljg3IDY0LjgxIEwgOTUuODcgNTguNTYgTCA5NS44NyA1Mi4zMSBMIDk1Ljg3IDQ2LjA2IEwgOTUuODcgMzkuODEgTCA5NS44NyAzMy41NyBMIDk1Ljg3IDI3LjMyIEwgOTUuODcgMjEuMDcgTCA5NS44NyAxNC44MiBMIDk1Ljg3IDguNTcgTCA5NS44NyAyLjMyIFogTSAyODcuMjcgMC41NCBMIDI5NS44NCAwLjE4IEwgMzA0Ljc2IDAuMTggTCAzMTMuNjkgMC4xOCBMIDMyMi4yNiAwLjU0IEwgMzI5LjIyIDIuNTAgTCAzMzQuOTQgNS43MSBMIDMzOS41OCAxMC4wMCBMIDM0Mi45NyAxNS41MyBMIDM0NS40NyAyMS45NiBMIDM0NS42NSAzMC4zNSBMIDM0NC4wNCAzNy42NyBMIDM0MC42NSA0My4yMSBMIDMzNi4zNiA0Ny44NSBMIDMzMS4xOSA1MS42MCBMIDMzMC44MyA1MS45NSBMIDM1MS4zNCA3OC43MCBMIDM0MS4yMCA4Ni42MyBMIDMxNS45MyA1NC4yOCBMIDMwMC4xMiA1NC40NSBMIDI5OS43NiA1Ni4wNiBMIDI5OS43NiA1OC4wMiBMIDI5OS43NiA1OS45OSBMIDI5OS43NiA2MS45NSBMIDI5OS43NiA2My45MiBMIDI5OS43NiA2NS44OCBMIDI5OS43NiA2Ny44NCBMIDI5OS43NiA2OS44MSBMIDI5OS43NiA3MS43NyBMIDI5OS43NiA3My43NCBMIDI5OS43NiA3NS43MCBMIDI5OS43NiA3Ny42NiBMIDI5OS43NiA3OS42MyBMIDI5OS43NiA4MS41OSBMIDI5OS40MSA4Mi40OCBMIDI4Ny4yNyA4Mi40OCBMIDI4Ni45MSA3Ni45NSBMIDI4Ni45MSA3MS4wNiBMIDI4Ni45MSA2NS4xNyBMIDI4Ni45MSA1OS4yNyBMIDI4Ni45MSA1My4zOCBMIDI4Ni45MSA0Ny40OSBMIDI4Ni45MSA0MS42MCBMIDI4Ni45MSAzNS43MSBMIDI4Ni45MSAyOS44MiBMIDI4Ni45MSAyMy45MiBMIDI4Ni45MSAxOC4wMyBMIDI4Ni45MSAxMi4xNCBMIDI4Ni45MSA2LjI1IEwgMjg3LjI3IDAuNzEgWiBNIDE4NS43NSA5LjI1IEwgMTk3LjY5IDQuNDMgTCAyMjIuMDIgNjUuMzQgTCAyNDYuMzUgNC40MyBMIDI1OC4yOCA5LjI0IEwgMjIyLjAyIDEwMC4wMCBaIE0gMzAwLjEyIDEzLjU3IEwgMzAyLjgwIDEzLjIxIEwgMzA1LjgzIDEzLjIxIEwgMzA4Ljg3IDEzLjIxIEwgMzExLjkwIDEzLjIxIEwgMzE0Ljk0IDEzLjIxIEwgMzE3Ljk3IDEzLjIxIEwgMzIwLjgzIDEzLjM5IEwgMzIzLjE1IDE0LjEwIEwgMzI1LjQ3IDE0LjgyIEwgMzI3LjI2IDE2LjA3IEwgMzI4Ljg3IDE3LjUwIEwgMzMwLjI5IDE5LjEwIEwgMzMxLjU0IDIwLjg5IEwgMzMyLjQ0IDIzLjAzIEwgMzMyLjYyIDIzLjIxIEwgMzMyLjk3IDI2LjQyIEwgMzMyLjc5IDI5LjgyIEwgMzMxLjkwIDMyLjQ5IEwgMzMwLjgzIDM0Ljk5IEwgMzI5LjIyIDM2Ljk2IEwgMzI3LjI2IDM4LjU2IEwgMzI1LjEyIDM5Ljk5IEwgMzIyLjQ0IDQwLjg5IEwgMzE5LjQwIDQxLjQyIEwgMzE1LjgzIDQxLjQyIEwgMzEyLjI2IDQxLjQyIEwgMzA4LjY5IDQxLjQyIEwgMzA1LjEyIDQxLjQyIEwgMzAxLjU1IDQxLjQyIEwgMzAwLjEyIDQxLjA2IEwgMjk5Ljc2IDM5LjQ2IEwgMjk5Ljc2IDM3LjQ5IEwgMjk5Ljc2IDM1LjUzIEwgMjk5Ljc2IDMzLjU3IEwgMjk5Ljc2IDMxLjYwIEwgMjk5Ljc2IDI5LjY0IEwgMjk5Ljc2IDI3LjY3IEwgMjk5Ljc2IDI1LjcxIEwgMjk5Ljc2IDIzLjc1IEwgMjk5Ljc2IDIxLjc4IEwgMjk5Ljc2IDE5LjgyIEwgMjk5Ljc2IDE3Ljg1IEwgMjk5Ljc2IDE1Ljg5IEwgMjk5Ljk0IDE0LjEwIFogTSA0MTcuNTIgMjQuMTIgTCA0MjcuMzMgNDguNzQgTCA0MDcuNzAgNDguNzQgWiIvPgo8L3N2Zz4K";
|
|
6
6
|
/** Le nom lisible de chaque produit, depuis logos/index.json. */
|
|
7
7
|
export declare const NOMS_PRODUITS: Record<GlypheId, string>;
|
|
8
|
-
/** Ce que chaque produit FAIT, en deux mots
|
|
8
|
+
/** Ce que chaque produit FAIT, en deux mots : pour le lanceur d'apps. */
|
|
9
9
|
export declare const ACCROCHES_PRODUITS: Record<GlypheId, string>;
|
|
10
10
|
/** L'adresse des produits EN LIGNE. Partielle À DESSEIN : un produit qui n'a
|
|
11
11
|
* rien à ouvrir n'entre pas dans le lanceur. */
|