Tout ce que glyphfox sait faire
Un seul jeu de props dans tous les frameworks. Découvrez l'installation, chaque paquet, la syntaxe des noms et les moteurs du morphing, de la fusion et des états animés.
Installation
npm install glyphfox # Angular npm install glyphfox-angular
glyphfox n'a aucune dépendance. React, Vue, Svelte, Solid, Preact, Qwik, Lit, Astro, React Native, Ember et Tailwind CSS sont des peer dependencies facultatives, utilisées uniquement si vous importez leurs points d'entrée.
React
Chaque icône est un composant forwardRef compatible tree shaking, nommé d'après l'icône : arrow-right devient ArrowRightIcon. className, style et tous les attributs SVG sont transmis au svg.
import { HomeIcon, FileIcon, Icon, Fusion, MorphIcon, useMorph } from 'glyphfox/react';
export function App({ open, saved }) {
return (
<nav>
<HomeIcon />
<FileIcon size={20} weight={1.5} modifier={saved ? 'check' : undefined} />
<Icon name="cloud&lock:overlap" variant="duotone" />
<Fusion icons={['user', 'shield']} layout="badge" />
<MorphIcon name={open ? 'x' : 'menu'} duration={300} />
</nav>
);
}useMorph(name, options) renvoie des données d'icône qui se transforment à chaque changement de nom, pour vos propres moteurs de rendu. registerIcons(icons) rend les noms disponibles de façon synchrone, par exemple lors du rendu côté serveur.
Vue
<script setup>
import { ref } from 'vue';
import { HomeIcon, Fusion, MorphIcon } from 'glyphfox/vue';
const playing = ref(false);
</script>
<template>
<HomeIcon :size="32" color="#ff7a1a" variant="duotone" />
<Fusion :icons="['file', 'check']" layout="badge" />
<MorphIcon :name="playing ? 'pause' : 'play'" @click="playing = !playing" />
</template>Les props portent les mêmes noms ; dans les templates, vous pouvez aussi les écrire en kebab-case (secondary-color). Le composable useMorph(nameRef) est l'équivalent du hook React.
Svelte
<script>
import { HeartIcon, Fusion, morphStore } from 'glyphfox/svelte';
let liked = $state(false);
const icon = morphStore('menu');
</script>
<button onclick={() => (liked = !liked)}>
<HeartIcon animate="pop" trigger="state" active={liked} variant={liked ? 'solid' : 'outline'} />
</button>
<Fusion icons={['message-circle', 'heart']} layout="overlap" />Pour Svelte 5. Les composants sont livrés sous forme de fichiers .svelte compilés par votre application. morphStore(name) est un store qui se transforme à chaque set(name).
Angular
import { bootstrapApplication } from '@angular/platform-browser';
import { iconHome, iconFile, iconCheck } from 'glyphfox';
import { provideGlyphFox } from 'glyphfox-angular';
bootstrapApplication(App, {
providers: [provideGlyphFox({ icons: [iconHome, iconFile, iconCheck], defaults: { weight: 1.75 } })],
});import { Component } from '@angular/core';
import { GlyphFoxIcon } from 'glyphfox-angular';
@Component({
selector: 'app-toolbar',
imports: [GlyphFoxIcon],
template: `
<gf-icon name="home"></gf-icon>
<gf-icon name="file+check@tr" variant="duotone" [size]="20"></gf-icon>
<gf-icon [icons]="['cloud', 'lock']" layout="overlap"></gf-icon>
`,
})
export class Toolbar {}glyphfox-angular est publié au format de paquet Angular, construit avec ng-packagr. GlyphFoxIcon est un composant standalone ; provideGlyphFox enregistre les icônes par nom ainsi que les props par défaut.
Composant web et CDN
<script src="https://cdn.jsdelivr.net/npm/glyphfox@1"></script> <!-- or https://unpkg.com/glyphfox@1 --> <glyph-fox name="home"></glyph-fox> <glyph-fox name="file+check" size="32" weight="1.5"></glyph-fox> <glyph-fox name="cloud&lock" layout="overlap"></glyph-fox> <glyph-fox name="menu" morph duration="300"></glyph-fox>
Un seul fichier avec toutes les icônes, l'élément et le runtime pour HTML pur. Chaque prop devient un attribut en kebab-case. Avec un bundler, importez glyphfox/web, ou glyphfox/web/element pour n'enregistrer que vos icônes. L'attribut morph anime chaque changement de name.
Tailwind CSS
/* Tailwind v4 */
@import "tailwindcss";
@plugin "glyphfox/tailwind";
/* Tailwind v3: plugins: [require('glyphfox/tailwind')] */<span class="gf-home text-2xl text-orange-500"></span> <span class="gf-[file+check] gf-spin"></span> <span class="gf-[cloud&lock]/side"></span> <span class="gf-heart/solid-sharp-w1.5"></span>
Les icônes sont rendues sous forme de masques CSS en currentColor : les utilitaires de couleur, de taille et d'opacité s'appliquent donc. Après la barre oblique, vous pouvez combiner des axes, une disposition de fusion ou un coin de badge avec des traits d'union. Tailwind v4 n'accepte + et & qu'entre crochets ; la v3 accepte aussi gf-file+check.
HTML pur
<script type="module" src="https://cdn.jsdelivr.net/npm/glyphfox@1/dist/runtime/auto.js"></script> <i data-glyph="search" data-size="20" data-variant="duotone"></i>
Le runtime remplace chaque élément doté de data-glyph par du SVG inline, y compris les éléments ajoutés plus tard. Les props sont des attributs data en kebab-case.
JavaScript
import { toSvg, fuse, createMorph, search, getIcon, icons } from 'glyphfox';
toSvg('file', { size: 32, color: '#ff7a1a', variant: 'solid' });
toSvg('menu', { morphTo: 'x', trigger: 'hover' }); // CSS only morph
fuse(['cloud', 'lock'], { layout: 'overlap', gap: 1 }); // icon data that passes the lint
createMorph(getIcon('play'), getIcon('pause')).frame(0.5);
search('arrow', { limit: 10 });Le paquet fournit aussi icons.json, sprite.svg, styles.css, glyphfox/core (le moteur sans les données des icônes) et glyphfox/tools (lint et Fox-ify).
Frameworks et recettes
Les mêmes props existent en paquets pour Solid, Preact, Qwik, Lit, Astro, React Native et Ember, ainsi qu'en Server Components sans hooks pour React. Les recettes couvrent Next.js, Nuxt, SvelteKit, Remix, Alpine et htmx.
Props
Les mêmes props, avec les mêmes noms et le même sens, dans React, Vue, Svelte, Angular, le composant web et toSvg. S'y ajoutent class et style, transmis au svg (ou à l'élément hôte pour Angular et le composant web).
| Prop | Attribut | Type | Par défaut | Description |
|---|---|---|---|---|
size | size | number, string | 24 | Largeur et hauteur ; les nombres sont en pixels. |
color | color | string | currentColor | Couleur principale. |
secondaryColor | secondary-color | string | color | Couleur du calque duotone et du remplissage plein. |
secondaryOpacity | secondary-opacity | number | 0.3 / 1 | Opacité du calque duotone ou du remplissage plein. |
weight | weight | number | 2 | Trait de 1 à 3 sur la grille de 24, avec compensation optique sous 24 px. |
absoluteWeight | absolute-weight | boolean | false | Garde le trait à weight pixels, quelle que soit la taille. |
corners | corners | round, sharp | round | Angles et extrémités arrondis ou vifs. |
variant | variant | outline, duotone, solid | outline | Axe de style ; le style plein est généré à partir des formes fermées. |
rotate | rotate | number | 0 | Rotation en degrés. |
flipX | flip-x | boolean | false | Miroir horizontal. |
flipY | flip-y | boolean | false | Miroir vertical. |
mirrorRtl | mirror-rtl | boolean | false | Miroir dans les mises en page de droite à gauche. |
animate | animate | draw, pop, wiggle, spin, pulse, bounce, shake | aucun | Préréglage d'état animé. |
trigger | trigger | mount, hover, click, focus, press, inView, loop, state | mount | Quand l'animation ou le morphing se déclenche. |
active | active | boolean | false | L'état pour le déclencheur state. |
duration | duration | number (ms) | selon le préréglage | Durée de l'animation ou du morphing. |
delay | delay | number (ms) | 0 | Délai de l'animation ou du morphing. |
loop | loop | boolean, number | false | Répète à l'infini ou un nombre de fois donné (spin et pulse bouclent par défaut). |
modifier | modifier | plus, minus, check, x, alert, lock, clock, sync, arrow-up, arrow-down, dot | aucun | Badge avec espace de découpe automatique. |
modifierCorner | modifier-corner | top-left, top-right, bottom-left, bottom-right | bottom-right | Coin du badge. |
morphTo | morph-to | name, data | aucun | Cible du morphing ; le déclencheur décide quand elle apparaît. |
title | title | string | aucun | Nom accessible : title, role img et aria-label. |
decorative | decorative | boolean | true sans title | Masque l'icône aux technologies d'assistance. |
animation | animation | true, name, timeline | Joue l'animation conçue pour l'icône elle-même, une chronologie d'images clés par élément. Prioritaire sur animate. | |
triggerParent | trigger-parent | boolean | false | Le survol, le focus et l'appui sur le lien ou le bouton le plus proche animent aussi l'icône. |
disabled | disabled | boolean | false | Arrête toutes les animations. |
Syntaxe des noms
Commune au composant web, au CDN, à Tailwind, à la CLI, au composant Icon et à toSvg.
| Notation | Signification | Aperçu |
|---|---|---|
file | une icône | |
file+check | avec un badge modificateur | |
file+check@tl | badge dans un coin : tl, tr, bl, br | |
cloud&lock | une fusion de 2 à 10 icônes | |
cloud&lock:side | une fusion avec une disposition | |
heart/solid | un style : outline, duotone, solid |
Axes variables
L'épaisseur va de 1 à 3. Sous 24 px, le trait s'épaissit légèrement pour que les petites icônes gardent leur présence ; absoluteWeight désactive ce comportement. Les angles alternent entre jointures et extrémités arrondies ou vives. Le style plein remplit les formes extérieures fermées et évide les lignes intérieures en espace négatif ; il est calculé à la compilation pour le jeu d'icônes et au rendu pour les fusions et les modificateurs.
Morphing
Les tracés sont aplatis en brins, appariés par une affectation optimale, rééchantillonnés au même nombre de points, alignés puis interpolés. Les brins sans partenaire rétrécissent et s'estompent. Des indications réglées à la main couvrent les paires courantes. Sans JavaScript, toSvg avec morphTo renvoie un SVG qui se transforme grâce à une transition CSS de la propriété d, avec un fondu enchaîné là où elle n'est pas prise en charge.
Fusion
fuse combine de 2 à 10 icônes en une seule icône qui passe toujours le lint. Dispositions : overlap, side, stack, grid (2x2, 3x3 et 10 emplacements), orbit, badge et inside. Les éléments sont mis à l'échelle et calés sur la grille, et l'élément de derrière est découpé autour de celui de devant avec un espace de découpe. Options : layout, gap, weight, scale et offsets.
États animés
Chaque préréglage est une petite feuille de style intégrée au SVG : il fonctionne donc partout où va le SVG. draw trace les traits dans l'ordre du dessin, shake balance l'icône depuis le haut. Déclencheurs : mount, hover (l'icône ou son parent direct), click (rejoue à chaque clic) et state (joue tant que active est vrai). La réduction des animations les désactive toutes.
Modificateurs
Onze badges dans quatre coins. L'icône en dessous est découpée géométriquement autour du badge : le résultat est une icône ordinaire qui passe le lint, dans toutes les épaisseurs.
CLI
npx glyphfox search arrow npx glyphfox show file+check --variant solid npx glyphfox copy heart --format jsx --size 32 npx glyphfox fuse cloud lock --layout overlap --out cloud-lock.svg npx glyphfox morph menu x --trigger hover --out menu.svg npx glyphfox build home search file+check --type sprite --out public/icons npx glyphfox build --from icons.txt --type package --name @acme/icons npx glyphfox lint my-icon.svg npx glyphfox foxify any.svg --out fox.svg npx glyphfox export android home search --out app/src/main/res
copy affiche l'extrait et le place dans le presse-papiers (formats : svg, jsx, vue, svelte, angular, html, tailwind, cdn, datauri). build génère un sprite, un fichier CSS avec des classes de masque ou un petit paquet à partir d'une liste. Chaque commande accepte les props partagées sous forme d'options, par exemple --weight 1.5 --corners sharp.
Collections
Deux collections signature sont livrées dans le paquet à côté du jeu de base : display, 60 icônes dessinées sur une grille de 48 pour les états vides, l’onboarding et les grandes tuiles, et isometric, 30 icônes en projection isométrique sur la grille de 24. Écrivez leurs noms display/NAME et isometric/NAME dans toSvg, le web component, le build CDN et le composant Icon. Leurs données viennent de glyphfox/collections, et les composants React, Vue et Svelte de glyphfox/react/collections, glyphfox/vue/collections et glyphfox/svelte/collections : les entrées par défaut restent aussi légères qu’avant.
import { toSvg } from 'glyphfox';
import { DisplayCalendarClockIcon } from 'glyphfox/react/collections';
toSvg('display/calendar-clock', { size: 96, weight: 3 });
toSvg('isometric/cube', { variant: 'solid' });
<glyph-fox name="display/rocket-launch" size="64"></glyph-fox>La taille, la couleur, la graisse, la rotation, les retournements et les animations prédéfinies marchent sur les deux. Les icônes display font 48 px par défaut et mesurent la graisse en unités de leur grille de 48, donc la graisse 2 garde le trait dessiné. Les styles solid et duotone, les modificateurs, la fusion et les morphs sont faits pour la grille de 24 : les icônes display restent en contour, et une fusion ou un modificateur avec l’une d’elles est une erreur. Les icônes isométriques prennent en charge toutes les fonctions du jeu de base.
Règles des icônes
Uniquement des dessins originaux, sur une grille de 24 sur 24 : viewBox 0 0 24 24, aucun remplissage, stroke currentColor, épaisseur de trait 2, extrémités et angles arrondis, marge de 2 px, aucune transformation, et aucun remplissage hormis un calque duotone facultatif avec la classe gf-secondary. Les sources se trouvent dans icons/NAME.svg, avec un fichier annexe NAME.json pour les catégories et les étiquettes, et tools/icons/lint.mjs les vérifie.
Icônes sociales
La catégorie
socialréunit les icônes de marque des réseaux vers lesquels on renvoie le plus, d'Instagram, WhatsApp, Facebook, X, TikTok et YouTube à GitHub, Discord, Spotify et Steam. Chacune s'appellebrand-NAME, est dessinée comme le contour du logo sur la même grille et avec le même trait que le reste du jeu, et porte comme tags le nom du réseau, ses anciens noms, social, logo et brand.import { BrandInstagramIcon } from 'glyphfox/react'; <a href="https://www.instagram.com/yourname" aria-label="Instagram"> <BrandInstagramIcon size={20} /> </a>Les icônes de marque sont des marques déposées de leurs propriétaires et doivent être utilisées selon les règles de chaque marque.