diff --git a/src/content/docs/fr/reference/experimental-flags/fonts.mdx b/src/content/docs/fr/reference/experimental-flags/fonts.mdx index 53d8dfcab57b4..b7760b065a502 100644 --- a/src/content/docs/fr/reference/experimental-flags/fonts.mdx +++ b/src/content/docs/fr/reference/experimental-flags/fonts.mdx @@ -152,7 +152,7 @@ body { ## Fournisseurs de polices distantes disponibles -Astro réexporte la plupart des fournisseurs [unifont](https://github.com/unjs/unifont/). Vous pouvez également [créer un fournisseur de polices Astro personnalisé](#créer-votre-propre-fournisseur-de-polices) pour n'importe quel fournisseur unifont. +Astro exporte quelques fournisseurs intégrés, basés sur [unifont](https://github.com/unjs/unifont/). Vous pouvez également [créer un fournisseur de polices Astro personnalisé](#créer-votre-propre-fournisseur-de-polices). Les fournisseurs suivants disposent d'une prise en charge intégrée : @@ -161,6 +161,7 @@ Les fournisseurs suivants disposent d'une prise en charge intégrée : - [Fontshare](https://www.fontshare.com/) - [Fontsource](https://fontsource.org/) - [Google](https://fonts.google.com/) +- [Google Icons](https://fonts.google.com/icons) Pour utiliser un fournisseur distant intégré, configurez `provider` avec la valeur appropriée pour le fournisseur de polices choisi : @@ -206,7 +207,7 @@ provider: fontProviders.fontsource() provider: fontProviders.google() ``` -En complément, le fournisseur de polices `google()` accepte toutes les options disponibles dans l'interface [`ProviderOption` d'unifont pour Google](https://github.com/unjs/unifont/blob/main/src/providers/google.ts#L10-L26) : +En complément, le fournisseur de polices `google()` accepte toutes les options disponibles dans le [fournisseur d'unifont pour Google](https://github.com/unjs/unifont/#options-1) : ```js provider: fontProviders.google({ @@ -218,6 +219,28 @@ provider: fontProviders.google({ + + +

+ +

+ +```js +provider: fontProviders.googleicons() +``` + +En complément, le fournisseur de polices `googleicons()` accepte toutes les options disponibles dans les [options Google Icons d'unifont](https://github.com/unjs/unifont/#options-2): + +```js +provider: fontProviders.googleicons({ + glyphs: { + "Material Symbols Outlined": ["arrow_right", "favorite", "arrow_drop_down"] + } +}) +``` + +
+ ## Exemples d'utilisation @@ -514,7 +537,7 @@ optimizedFallbacks: false D'autres options de configuration sont disponibles pour les polices distantes. Définissez-les pour personnaliser les données chargées depuis votre [fournisseur de polices](#fournisseurs-de-polices-distantes-disponibles), par exemple pour télécharger uniquement certains styles ou graisses de police. Pour un contrôle plus précis, une [configuration granulaire](#configuration-granulaire-des-polices-distantes) est disponible. -Sous le capot, ces options sont gérées par [unifont](https://github.com/unjs/unifont/). Certaines propriétés peuvent ne pas être prises en charge par certains fournisseurs et être gérées différemment par chacun. +Chaque fournisseur est responsable de la gestion de ces options, donc la disponibilité et la prise en charge des propriétés suivantes peuvent varier. #### weights @@ -846,88 +869,162 @@ export default defineConfig({ ## Créer votre propre fournisseur de polices -Si vous ne souhaitez pas utiliser l'un des [fournisseurs intégrés](#fournisseurs-de-polices-distantes-disponibles) (par exemple, vous souhaitez utiliser un fournisseur de polices unifont tiers ou créer quelque chose pour un registre privé), vous pouvez créer le vôtre. +Si vous ne souhaitez pas utiliser l'un des [fournisseurs intégrés](#fournisseurs-de-polices-distantes-disponibles) (par exemple, vous souhaitez utiliser un [fournisseur de polices unifont tiers](#prendre-en-charge-un-fournisseur-unifont-tiers) ou [créer quelque chose pour un registre privé](#prendre-en-charge-un-registre-privé)), vous pouvez créer le vôtre. -Un fournisseur de polices Astro est composé de deux parties : l'objet de configuration et l'implémentation réelle. +La méthode préférée pour implémenter un fournisseur de polices personnalisé est d'exporter une fonction qui retourne [l'objet `FontProvider`](#lobjet-fournisseur-de-polices) et prend la configuration en paramètre. - +### L'objet fournisseur de polices -1. Créez une fonction qui renvoie un objet de configuration `FontProvider` contenant : +L'API expérimentale des polices vous permet d'accéder aux polices de manière unifiée. Chaque famille requiert l'utilisation d'un fournisseur de polices Astro pour récupérer les polices de caractères. - - `entrypoint` : Une URL, un chemin relatif à la racine ou une importation de package. - - `config` : Un objet sérialisable facultatif transmis au fournisseur unifont. +Un `FontProvider` est un objet qui contient les propriétés requises [`name`](#name-1) et [`resolveFont()`](#resolvefont). Il a aussi les propriétés optionnelles [`config`](#config), [`init()`](#init) et [`listFonts()`](#listfonts) de disponibles. - +#### `name` - +

- ```ts title="provider/config.ts" - import type { FontProvider } from 'astro'; +**Type :** `string` +

- export function myProvider(): FontProvider { - return { - entrypoint: new URL('./implementation.js', import.meta.url) - }; - }; - ``` +Un nom unique pour le fournisseur, utilisé dans les logs et pour l'identification. -
+#### `resolveFont()` - +

- ```ts title="provider/config.ts" - import type { FontProvider } from 'astro'; +**Type :** `(options: ResolveFontOptions) => Awaitable<{ fonts: FontFaceData[] } | undefined>`
+

- interface Config { - // ... - }; +Utilisée pour récupérer et retourner les données d'une police de caractères à partir des options données. - export function myProvider(config: Config): FontProvider { - return { - entrypoint: new URL('./implementation.js', import.meta.url), - config - }; - }; - ``` +#### `config` -
+

- +**Type :** `Record`
+**Par défaut :** `undefined` +

-2. Créez un deuxième fichier pour exporter votre implémentation de fournisseur unifont : +Un objet sérialisable, utilisé pour l'identification. - ```ts title="implementation.ts" - import { defineFontProvider } from "unifont"; +#### `init()` - export const provider = defineFontProvider("mon-fournisseur", async (options, ctx) => { - // récupérer/définir vos polices personnalisées - // ... - }); - ``` +

- :::tip +**Type :** `(context: FontProviderInitContext) => Awaitable`
+**Par défaut :** `undefined` +

- Vous pouvez consulter [le code source des fournisseurs d'unifont](https://github.com/unjs/unifont/blob/main/src/providers/) pour en savoir plus sur la création d'un fournisseur unifont. +Une fonction de rappel optionnelle, utilisée pour exécuter une logique d'initialisation. Son contexte contient un objet `storage`, utile pour la mise en cache. - ::: +#### `listFonts()` -3. Ajoutez votre fournisseur personnalisé à votre configuration de police. +

- ```js title="astro.config.mjs" ins="myProvider()" - import { defineConfig } from "astro/config"; - import { myProvider } from "./provider/config"; +**Type :** `() => Awaitable`
+**Par défaut :** `undefined` +

- export default defineConfig({ - experimental: { +Fonction de rappel optionnelle, utilisée pour retourner la liste des noms de polices disponibles. + +### Prendre en charge un registre privé + +L'exemple suivant définit un fournisseur de polices pour un registre privé : + +```ts title="font-provider.ts" +import type { FontProvider } from "astro"; +import { retrieveFonts, type Fonts } from "./utils.js", + +interface Config { + token: string; +} + +export function registryFontProvider(config: Config): FontProvider { + let data: Fonts = {} + + return { + name: "registry", + config, + init: async () => { + data = await retrieveFonts(token); + }, + listFonts: () => { + return Object.keys(data); + }, + resolveFont: ({ familyName, ...options }) => { + const fonts = data[familyName]; + if (fonts) { + return { fonts }; + } + return undefined; + }, + }; +} +``` + +Vous pouvez ensuite enregistrer ce fournisseur de polices dans la configuration Astro : + +```ts title="astro.config.ts" +import { defineConfig } from "astro/config"; +import { registryFontProvider } from "./font-provider"; + +export default defineConfig({ + experimental: { fonts: [{ - provider: myProvider(), - // ... + provider: registryFontProvider({ + token: "..." + }), + name: "Custom", + cssVariable: "--font-custom" }] - } - }); - ``` + } +}); +``` -
+### Prendre en charge un fournisseur unifont tiers + +Vous pouvez définir un fournisseur de polices Astro utilisant un fournisseur unifont sous le capot : + +```ts title="font-provider.ts" {3,5,6} +import type { FontProvider } from "astro"; +import type { InitializedProvider } from 'unifont'; +import { acmeProvider, type AcmeOptions } from '@acme/unifont-provider' + +function acmeFontProvider(config?: AcmeOptions): FontProvider { + const provider = acmeProvider(config); + let initializedProvider: InitializedProvider | undefined; + return { + name: provider._name, + config, + async init(context) { + initializedProvider = await provider(context); + }, + async resolveFont({ familyName, ...rest }) { + return await initializedProvider?.resolveFont(familyName, rest); + }, + async listFonts() { + return await initializedProvider?.listFonts?.(); + }, + }; +} +``` + +Vous pouvez ensuite enregistrer ce fournisseur de polices dans la configuration Astro : + +```ts title="astro.config.ts" +import { defineConfig } from "astro/config"; +import { acmeFontProvider } from "./font-provider"; + +export default defineConfig({ + experimental: { + fonts: [{ + provider: acmeFontProvider({/* ... */}), + name: "Custom", + cssVariable: "--font-custom" + }] + } +}); +``` ## Mise en cache