Icônes
Quatre jeux d'icônes, et la seule question qui décide lequel dessine une marque.
duxt puise dans quatre collections Iconify. La question n'est jamais « laquelle rend le mieux ici », mais ce qu'est la chose dessinée, parce que c'est le seul test qui donne deux fois la même réponse.
| Jeu | Dessine | Couleur | Nommé dans |
|---|---|---|---|
| lucide | l'interface que duxt dessine lui-même | monochrome, hérite currentColor | partout ; le choix par défaut |
| vscode-icons | un fichier, le langage d'un bloc, un outil de la pile | la sienne | file-icons.ts, et les onglets des gestionnaires |
| Simple Icons | une plateforme, un service ou une entreprise en tant que telle | monochrome | le composant qui le nomme |
| flag-icons | la région d'une locale | la sienne | DuxtLocale, dérivé |
La règle
C'est ce qui est dessiné qui décide, et il y a deux sortes de marques :
- La pile — un fichier, le langage d'un bloc, un outil que l'on exécute — est vscode-icons. Il porte les vraies couleurs dans le fichier, ce dont une arborescence et un en-tête de code ont précisément besoin.
- Un tiers en tant que tel — une plateforme, un service, une entreprise vers laquelle le site pointe ou à laquelle il transmet quelque chose — est Simple Icons.
Tout ce qui n'est pas une marque — un bouton de copie, un chevron, une loupe, une flèche de lien externe — est lucide, et ne demande aucune décision.
Énoncée par domaine plutôt que par disponibilité, la règle se prolonge d'elle-
même. Laravel, GitHub, Discord et OpenAI relèvent de Simple Icons parce que ce
sont des parties que ce site nomme, non des morceaux de la pile dont il est
fait. Les gestionnaires de paquets relèvent de vscode-icons parce qu'un onglet
qui exécute pnpm add nomme un outil de la pile.
C'est le domaine qui décide, pas la collection. vscode-icons possède
file-type-claude — et c'est, de par son propre espace de noms, l'icône d'un
fichier Claude. Le bouton qui envoie cette page à la plateforme Claude
est simple-icons:claude, parce que c'est la plateforme qu'il nomme. La même
lecture garde simple-icons:openai à côté plutôt que de répartir une paire de
boutons sur deux collections.
Pourquoi pas un seul jeu pour tout
Parce que monochrome et coloré sont deux métiers différents, pas deux goûts.
Une icône d'interface doit prendre la couleur du texte, sinon elle se bat avec
chaque état autour d'elle : survol, actif, atténué, désactivé. lucide hérite de
currentColor, donc le contrôle est stylé une fois et l'icône suit.
Une icône de type de fichier doit garder ses couleurs, sinon une arborescence
devient une colonne de formes grises identiques. C'est la raison d'être de
vscode-icons, et pourquoi app/utils/file-icons.ts y projette chaque extension
et chaque identifiant de langage.
La couleur ne nous appartient pas
Les onglets des gestionnaires de paquets étaient auparavant des Simple Icons teintés à la main : huit valeurs hexadécimales, deux par gestionnaire, parce qu'une seule ne peut servir les deux thèmes — la crème de bun disparaît sur du blanc, le rouge de npm devient terne sur du noir. Chacune était un nombre relevé sur une page de marque, à relever de nouveau au prochain changement de charte.
vscode-icons a supprimé la table en portant les couleurs dans le fichier. Quand
une marque a tout de même besoin d'aide, la collection le dit en général
elle-même : pnpm, ce sont des carrés orange et des blancs, donc la moitié
de la grille disparaît sur une page blanche — et vscode-icons livre
file-type-light-pnpm avec #4e4e4e à la place du blanc, précisément pour
cela. Il ne livre de variante claire pour aucun autre gestionnaire présent ici.
Une marque qui a besoin des deux graphies est dessinée deux fois et permutée par
la classe de thème (dark:hidden / hidden dark:block) — la technique même
qu'emploie l'affiche de prévisualisation de la page d'accueil pour ses deux
captures. Un filtre CSS appliqué à une marque en couleur produit une couleur que
personne n'a choisie.
Licences, et ce qu'une licence ne peut pas accorder
Les quatre collections sont permissives et compatibles avec la MIT de duxt :
vscode-icons et flag-icons sont sous MIT, lucide sous ISC, Simple Icons sous
CC0-1.0. Chacune est nommée avec sa licence sur la page des
remerciements, car icon.clientBundle intègre les SVG dans ce qui est
livré — le paquet transporte les œuvres, donc il transporte les mentions.
Une licence sur le fichier n'est pas une licence sur la marque. Simple Icons le dit dans sa propre LICENSE : CC0 libère le SVG et ne peut libérer un droit de marque qu'il n'a jamais détenu. Il en va de même pour les types de fichiers de vscode-icons : la MIT couvre le dessin, pas les marques Python, Rust ou Vue qui s'y trouvent.
Ce que fait duxt est un usage nominatif : le logo bun figure sur l'onglet qui
exécute bun add, l'icône Python étiquette un bloc Python, et les marques Claude
et OpenAI figurent sur les boutons qui envoient la page à ces services. Nommer
une chose pour l'identifier est l'usage que le droit des marques autorise sans
permission. Utiliser l'une de ces marques comme logo, favicon ou caution de duxt
ne le serait pas — et duxt ne le fait pas.