@cyrilld/zestds 0.1.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.
@@ -0,0 +1,151 @@
1
+ import * as react from 'react';
2
+ import { SVGProps } from 'react';
3
+
4
+ /**
5
+ * Le catalogue des drapeaux — LA source unique.
6
+ *
7
+ * ⚠️ GÉNÉRÉ depuis le Figma de Zest, cadre « Country icons » (`3853:17761`).
8
+ * Ne pas corriger à la main : corriger le Figma, puis régénérer. Une retouche
9
+ * locale serait écrasée sans laisser de trace.
10
+ *
11
+ * 234 drapeaux, tous en pastille ronde de 24, tous autonomes — un dessin par
12
+ * symbole, aucune composition.
13
+ *
14
+ * ------------------------------------------------------------------------
15
+ * LES COULEURS NE SONT PAS PORTÉES SUR LES JETONS
16
+ * ------------------------------------------------------------------------
17
+ * Le bleu du drapeau français est `#0052B4` et le restera. Les couleurs d'un
18
+ * drapeau ne sont pas une décision de Zest : ce sont des faits nationaux, et
19
+ * les rapprocher de la palette de marque produirait des drapeaux faux. C'est
20
+ * l'inverse exact de la règle des icônes de type de fichier, où la couleur
21
+ * catégorise et doit donc suivre le thème.
22
+ *
23
+ * Conséquence à connaître : un drapeau ne suit PAS la couleur du texte, et ne
24
+ * répond pas au thème.
25
+ *
26
+ * ------------------------------------------------------------------------
27
+ * UNE SEULE FORME : LA PASTILLE RONDE
28
+ * ------------------------------------------------------------------------
29
+ * Le rond est découpé dans les tracés eux-mêmes, pas par un masque : chaque
30
+ * SVG est complet et se copie tel quel. Il n'y a ni rectangle bordé ni carré —
31
+ * la question était ouverte, le Figma l'a tranchée en ne dessinant que le rond.
32
+ *
33
+ * ------------------------------------------------------------------------
34
+ * CINQ CODES DU FIGMA SONT FAUX, ET ILS SONT CORRIGÉS ICI
35
+ * ------------------------------------------------------------------------
36
+ * Relevé en regardant les dessins, pas en lisant les noms. Le dessin fait foi :
37
+ * un jeu de drapeaux se consulte par code, et une étiquette fausse rend le
38
+ * drapeau introuvable — un sélecteur de pays n'aurait jamais rendu le Soudan.
39
+ *
40
+ * DS → SD le dessin est le Soudan. `SD` était absent du jeu,
41
+ * et `DS` n'est pas un code ISO : une transposition.
42
+ * CD (×2) → CG deux symboles portaient `CD` avec DEUX dessins
43
+ * différents. L'un est bien le Congo-Kinshasa, l'autre
44
+ * est le Congo-Brazzaville. `CG` était absent du jeu.
45
+ * GB-2 → GB-ENG le dessin est l'Angleterre. Son code ISO 3166-2.
46
+ * BQ (×3) → BQ-BO Bonaire
47
+ * BQ-SE Saint-Eustache
48
+ * BQ-SA Saba
49
+ *
50
+ * ⚠️ `BQ` ×3 N'EST PAS UNE ERREUR DU FIGMA, contrairement aux trois autres.
51
+ * `BQ` désigne les Pays-Bas caribéens, qui sont trois îles, chacune avec son
52
+ * drapeau : un code pour trois dessins. Le jeu les distingue par leur code de
53
+ * subdivision, et `FLAG_ALIAS` renvoie `BQ` sur Bonaire, la plus peuplée, pour
54
+ * qu'une recherche par alpha-2 ne tombe pas dans le vide.
55
+ *
56
+ * Chaque entrée corrigée garde `codeFigma`, le code tel que le Figma l'écrit,
57
+ * pour que l'écart reste trouvable au lieu d'être lissé. Le Figma reste à
58
+ * corriger — voir « En attente » dans le README.
59
+ *
60
+ * ------------------------------------------------------------------------
61
+ * CE QUI MANQUE
62
+ * ------------------------------------------------------------------------
63
+ * 19 codes ISO 3166-1 alpha-2 n'ont pas de dessin. Pour l'essentiel des
64
+ * territoires : AQ Antarctique, BV Île Bouvet, CI Côte d'Ivoire, CV Cap-Vert,
65
+ * GF Guyane française, GP Guadeloupe, GS Géorgie du Sud, HM Îles Heard, MF
66
+ * Saint-Martin, NC Nouvelle-Calédonie, PM Saint-Pierre-et-Miquelon, RE La
67
+ * Réunion, SH Sainte-Hélène, SJ Svalbard, TF Terres australes françaises, UM
68
+ * Îles mineures des États-Unis, VA Vatican, WF Wallis-et-Futuna, YT Mayotte.
69
+ *
70
+ * ⚠️ CINQ SONT DES DÉPARTEMENTS ET COLLECTIVITÉS FRANÇAIS — Guadeloupe, La
71
+ * Réunion, Mayotte, Guyane, Saint-Pierre-et-Miquelon. Sur un produit français,
72
+ * c'est le trou qui se remarquera en premier. À relever au Figma.
73
+ *
74
+ * ------------------------------------------------------------------------
75
+ * LE POIDS, ET LE POINT D'ENTRÉE
76
+ * ------------------------------------------------------------------------
77
+ * 317 Ko une fois nettoyés, contre 197 Ko pour tout le reste du paquet. Un
78
+ * catalogue est un objet de données : aucun secouage d'arbre ne retire les 233
79
+ * drapeaux qu'un écran n'affiche pas. Ils sont donc derrière un point d'entrée
80
+ * séparé, `@cyrilld/zestds/flags`, que seul un consommateur qui en veut paie.
81
+ *
82
+ * Les noms français viennent de `Intl.DisplayNames`, pas d'une liste recopiée :
83
+ * une liste se périme, l'ICU du navigateur non.
84
+ */
85
+ interface ZestFlag {
86
+ /** Le code. ISO 3166-1 alpha-2 en général, 3166-2 pour les subdivisions, `earth` pour le globe. */
87
+ code: string;
88
+ /** Le nom, en français. */
89
+ nom: string;
90
+ /** Le code que le Figma écrit, QUAND IL DIFFÈRE. Voir l'en-tête. */
91
+ codeFigma?: string;
92
+ /** Le contenu du `<svg>`, boîte de 24, pastille ronde. */
93
+ svg: string;
94
+ }
95
+ /** Les 234 drapeaux, triés par nom français. */
96
+ declare const ZEST_FLAGS: ZestFlag[];
97
+ /**
98
+ * Les codes qui n'ont pas leur propre dessin et vers quoi les renvoyer.
99
+ *
100
+ * `BQ` est un vrai code — les Pays-Bas caribéens — mais le jeu dessine les
101
+ * trois îles séparément. Un sélecteur qui interroge `BQ` doit rendre quelque
102
+ * chose plutôt qu'un trou.
103
+ */
104
+ declare const FLAG_ALIAS: Record<string, string>;
105
+ /** Un drapeau par son code, insensible à la casse, alias compris. */
106
+ declare const findFlag: (code: string) => ZestFlag | undefined;
107
+
108
+ /**
109
+ * Les drapeaux, en composant.
110
+ *
111
+ * ⚠️ UN SEUL COMPOSANT, PAS 234. Les 121 icônes du design system ont chacune
112
+ * la leur parce qu'un écran les cite par leur nom, à l'écriture. Un drapeau se
113
+ * choisit À L'EXÉCUTION — depuis la langue du navigateur, le pays d'une
114
+ * adresse, une liste d'indicatifs téléphoniques. `<FlagIcon code={pays} />` le
115
+ * fait ; 234 exports nommés ne serviraient à personne et pèseraient dans
116
+ * l'autocomplétion de tout le monde.
117
+ */
118
+ interface FlagIconProps extends Omit<SVGProps<SVGSVGElement>, "code"> {
119
+ /** Le code du pays. Insensible à la casse, alias compris. Ex. `FR`, `bq`, `GB-ENG`. */
120
+ code: string;
121
+ /** Le diamètre, en pixels. 24 est la taille de dessin. */
122
+ size?: number;
123
+ /**
124
+ * Le nom à annoncer, s'il doit l'être.
125
+ *
126
+ * Par défaut le drapeau est décoratif : `aria-hidden`. Voir plus bas.
127
+ */
128
+ titre?: string;
129
+ }
130
+ /**
131
+ * Un drapeau, en pastille ronde.
132
+ *
133
+ * ⚠️ IL EST DÉCORATIF PAR DÉFAUT, et c'est le cas courant : dans un sélecteur
134
+ * de pays, dans une liste d'indicatifs, à côté d'une langue, le nom est écrit
135
+ * juste à côté. L'annoncer ferait entendre « France » deux fois.
136
+ *
137
+ * ⚠️ ET UN DRAPEAU N'EST PAS UNE LANGUE. Un drapeau seul, sans texte, pour
138
+ * dire « anglais » ou « espagnol », désigne un pays et pas une langue — il y a
139
+ * plus d'hispanophones au Mexique qu'en Espagne. Quand le drapeau est la SEULE
140
+ * indication, passer `titre` pour qu'il porte un nom accessible ; mais la vraie
141
+ * réponse est presque toujours d'écrire le nom à côté.
142
+ *
143
+ * ⚠️ IL NE RÉPOND PAS AU THÈME. Les couleurs d'un drapeau sont des faits
144
+ * nationaux, pas des jetons — voir l'en-tête du catalogue.
145
+ */
146
+ declare const FlagIcon: {
147
+ ({ code, size, titre, ...props }: FlagIconProps): react.JSX.Element | null;
148
+ displayName: string;
149
+ };
150
+
151
+ export { FLAG_ALIAS, FlagIcon, type FlagIconProps, ZEST_FLAGS, type ZestFlag as ZestDrapeau, type ZestFlag, findFlag };
@@ -0,0 +1,151 @@
1
+ import * as react from 'react';
2
+ import { SVGProps } from 'react';
3
+
4
+ /**
5
+ * Le catalogue des drapeaux — LA source unique.
6
+ *
7
+ * ⚠️ GÉNÉRÉ depuis le Figma de Zest, cadre « Country icons » (`3853:17761`).
8
+ * Ne pas corriger à la main : corriger le Figma, puis régénérer. Une retouche
9
+ * locale serait écrasée sans laisser de trace.
10
+ *
11
+ * 234 drapeaux, tous en pastille ronde de 24, tous autonomes — un dessin par
12
+ * symbole, aucune composition.
13
+ *
14
+ * ------------------------------------------------------------------------
15
+ * LES COULEURS NE SONT PAS PORTÉES SUR LES JETONS
16
+ * ------------------------------------------------------------------------
17
+ * Le bleu du drapeau français est `#0052B4` et le restera. Les couleurs d'un
18
+ * drapeau ne sont pas une décision de Zest : ce sont des faits nationaux, et
19
+ * les rapprocher de la palette de marque produirait des drapeaux faux. C'est
20
+ * l'inverse exact de la règle des icônes de type de fichier, où la couleur
21
+ * catégorise et doit donc suivre le thème.
22
+ *
23
+ * Conséquence à connaître : un drapeau ne suit PAS la couleur du texte, et ne
24
+ * répond pas au thème.
25
+ *
26
+ * ------------------------------------------------------------------------
27
+ * UNE SEULE FORME : LA PASTILLE RONDE
28
+ * ------------------------------------------------------------------------
29
+ * Le rond est découpé dans les tracés eux-mêmes, pas par un masque : chaque
30
+ * SVG est complet et se copie tel quel. Il n'y a ni rectangle bordé ni carré —
31
+ * la question était ouverte, le Figma l'a tranchée en ne dessinant que le rond.
32
+ *
33
+ * ------------------------------------------------------------------------
34
+ * CINQ CODES DU FIGMA SONT FAUX, ET ILS SONT CORRIGÉS ICI
35
+ * ------------------------------------------------------------------------
36
+ * Relevé en regardant les dessins, pas en lisant les noms. Le dessin fait foi :
37
+ * un jeu de drapeaux se consulte par code, et une étiquette fausse rend le
38
+ * drapeau introuvable — un sélecteur de pays n'aurait jamais rendu le Soudan.
39
+ *
40
+ * DS → SD le dessin est le Soudan. `SD` était absent du jeu,
41
+ * et `DS` n'est pas un code ISO : une transposition.
42
+ * CD (×2) → CG deux symboles portaient `CD` avec DEUX dessins
43
+ * différents. L'un est bien le Congo-Kinshasa, l'autre
44
+ * est le Congo-Brazzaville. `CG` était absent du jeu.
45
+ * GB-2 → GB-ENG le dessin est l'Angleterre. Son code ISO 3166-2.
46
+ * BQ (×3) → BQ-BO Bonaire
47
+ * BQ-SE Saint-Eustache
48
+ * BQ-SA Saba
49
+ *
50
+ * ⚠️ `BQ` ×3 N'EST PAS UNE ERREUR DU FIGMA, contrairement aux trois autres.
51
+ * `BQ` désigne les Pays-Bas caribéens, qui sont trois îles, chacune avec son
52
+ * drapeau : un code pour trois dessins. Le jeu les distingue par leur code de
53
+ * subdivision, et `FLAG_ALIAS` renvoie `BQ` sur Bonaire, la plus peuplée, pour
54
+ * qu'une recherche par alpha-2 ne tombe pas dans le vide.
55
+ *
56
+ * Chaque entrée corrigée garde `codeFigma`, le code tel que le Figma l'écrit,
57
+ * pour que l'écart reste trouvable au lieu d'être lissé. Le Figma reste à
58
+ * corriger — voir « En attente » dans le README.
59
+ *
60
+ * ------------------------------------------------------------------------
61
+ * CE QUI MANQUE
62
+ * ------------------------------------------------------------------------
63
+ * 19 codes ISO 3166-1 alpha-2 n'ont pas de dessin. Pour l'essentiel des
64
+ * territoires : AQ Antarctique, BV Île Bouvet, CI Côte d'Ivoire, CV Cap-Vert,
65
+ * GF Guyane française, GP Guadeloupe, GS Géorgie du Sud, HM Îles Heard, MF
66
+ * Saint-Martin, NC Nouvelle-Calédonie, PM Saint-Pierre-et-Miquelon, RE La
67
+ * Réunion, SH Sainte-Hélène, SJ Svalbard, TF Terres australes françaises, UM
68
+ * Îles mineures des États-Unis, VA Vatican, WF Wallis-et-Futuna, YT Mayotte.
69
+ *
70
+ * ⚠️ CINQ SONT DES DÉPARTEMENTS ET COLLECTIVITÉS FRANÇAIS — Guadeloupe, La
71
+ * Réunion, Mayotte, Guyane, Saint-Pierre-et-Miquelon. Sur un produit français,
72
+ * c'est le trou qui se remarquera en premier. À relever au Figma.
73
+ *
74
+ * ------------------------------------------------------------------------
75
+ * LE POIDS, ET LE POINT D'ENTRÉE
76
+ * ------------------------------------------------------------------------
77
+ * 317 Ko une fois nettoyés, contre 197 Ko pour tout le reste du paquet. Un
78
+ * catalogue est un objet de données : aucun secouage d'arbre ne retire les 233
79
+ * drapeaux qu'un écran n'affiche pas. Ils sont donc derrière un point d'entrée
80
+ * séparé, `@cyrilld/zestds/flags`, que seul un consommateur qui en veut paie.
81
+ *
82
+ * Les noms français viennent de `Intl.DisplayNames`, pas d'une liste recopiée :
83
+ * une liste se périme, l'ICU du navigateur non.
84
+ */
85
+ interface ZestFlag {
86
+ /** Le code. ISO 3166-1 alpha-2 en général, 3166-2 pour les subdivisions, `earth` pour le globe. */
87
+ code: string;
88
+ /** Le nom, en français. */
89
+ nom: string;
90
+ /** Le code que le Figma écrit, QUAND IL DIFFÈRE. Voir l'en-tête. */
91
+ codeFigma?: string;
92
+ /** Le contenu du `<svg>`, boîte de 24, pastille ronde. */
93
+ svg: string;
94
+ }
95
+ /** Les 234 drapeaux, triés par nom français. */
96
+ declare const ZEST_FLAGS: ZestFlag[];
97
+ /**
98
+ * Les codes qui n'ont pas leur propre dessin et vers quoi les renvoyer.
99
+ *
100
+ * `BQ` est un vrai code — les Pays-Bas caribéens — mais le jeu dessine les
101
+ * trois îles séparément. Un sélecteur qui interroge `BQ` doit rendre quelque
102
+ * chose plutôt qu'un trou.
103
+ */
104
+ declare const FLAG_ALIAS: Record<string, string>;
105
+ /** Un drapeau par son code, insensible à la casse, alias compris. */
106
+ declare const findFlag: (code: string) => ZestFlag | undefined;
107
+
108
+ /**
109
+ * Les drapeaux, en composant.
110
+ *
111
+ * ⚠️ UN SEUL COMPOSANT, PAS 234. Les 121 icônes du design system ont chacune
112
+ * la leur parce qu'un écran les cite par leur nom, à l'écriture. Un drapeau se
113
+ * choisit À L'EXÉCUTION — depuis la langue du navigateur, le pays d'une
114
+ * adresse, une liste d'indicatifs téléphoniques. `<FlagIcon code={pays} />` le
115
+ * fait ; 234 exports nommés ne serviraient à personne et pèseraient dans
116
+ * l'autocomplétion de tout le monde.
117
+ */
118
+ interface FlagIconProps extends Omit<SVGProps<SVGSVGElement>, "code"> {
119
+ /** Le code du pays. Insensible à la casse, alias compris. Ex. `FR`, `bq`, `GB-ENG`. */
120
+ code: string;
121
+ /** Le diamètre, en pixels. 24 est la taille de dessin. */
122
+ size?: number;
123
+ /**
124
+ * Le nom à annoncer, s'il doit l'être.
125
+ *
126
+ * Par défaut le drapeau est décoratif : `aria-hidden`. Voir plus bas.
127
+ */
128
+ titre?: string;
129
+ }
130
+ /**
131
+ * Un drapeau, en pastille ronde.
132
+ *
133
+ * ⚠️ IL EST DÉCORATIF PAR DÉFAUT, et c'est le cas courant : dans un sélecteur
134
+ * de pays, dans une liste d'indicatifs, à côté d'une langue, le nom est écrit
135
+ * juste à côté. L'annoncer ferait entendre « France » deux fois.
136
+ *
137
+ * ⚠️ ET UN DRAPEAU N'EST PAS UNE LANGUE. Un drapeau seul, sans texte, pour
138
+ * dire « anglais » ou « espagnol », désigne un pays et pas une langue — il y a
139
+ * plus d'hispanophones au Mexique qu'en Espagne. Quand le drapeau est la SEULE
140
+ * indication, passer `titre` pour qu'il porte un nom accessible ; mais la vraie
141
+ * réponse est presque toujours d'écrire le nom à côté.
142
+ *
143
+ * ⚠️ IL NE RÉPOND PAS AU THÈME. Les couleurs d'un drapeau sont des faits
144
+ * nationaux, pas des jetons — voir l'en-tête du catalogue.
145
+ */
146
+ declare const FlagIcon: {
147
+ ({ code, size, titre, ...props }: FlagIconProps): react.JSX.Element | null;
148
+ displayName: string;
149
+ };
150
+
151
+ export { FLAG_ALIAS, FlagIcon, type FlagIconProps, ZEST_FLAGS, type ZestFlag as ZestDrapeau, type ZestFlag, findFlag };