Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
213 changes: 155 additions & 58 deletions src/content/docs/fr/reference/experimental-flags/fonts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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 :

Expand All @@ -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 :

Expand Down Expand Up @@ -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({
Expand All @@ -218,6 +219,28 @@ provider: fontProviders.google({

</TabItem>

<TabItem label="Google Icons">

<p>
<Since v="5.16.9" />
</p>

```js
provider: fontProviders.googleicons()
```

En complément, le fournisseur de polices `googleicons()` accepte toutes les options disponibles dans les [options unifont Google Icons](https://github.com/unjs/unifont/#options-2):
Comment thread
ArmandPhilippot marked this conversation as resolved.
Outdated

```js
provider: fontProviders.googleicons({
glyphs: {
"Material Symbols Outlined": ["arrow_right", "favorite", "arrow_drop_down"]
}
})
```

</TabItem>

</Tabs>

## Exemples d'utilisation
Expand Down Expand Up @@ -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 prise en charge de ces options, donc la disponibilité et le support des propriétés suivantes peut varier.
Comment thread
ld-web marked this conversation as resolved.
Outdated

#### weights

Expand Down Expand Up @@ -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](#supporter-un-fournisseur-unifont-tiers) ou [créer quelque chose pour un registre privé](#supporter-un-registre-privé)), vous pouvez créer le vôtre.
Comment thread
ld-web marked this conversation as resolved.
Outdated

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.

<Steps>
### 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.

<Tabs>
#### `name`

<TabItem label="Sans configuration">
<p>

```ts title="provider/config.ts"
import type { FontProvider } from 'astro';
**Type:** `string`
Comment thread
ld-web marked this conversation as resolved.
Outdated
</p>

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.

</TabItem>
#### `resolveFont()`

<TabItem label="Avec configuration">
<p>

```ts title="provider/config.ts"
import type { FontProvider } from 'astro';
**Type:** `(options: ResolveFontOptions) => Awaitable<{ fonts: FontFaceData[] } | undefined>`<br />
Comment thread
ld-web marked this conversation as resolved.
Outdated
</p>

interface Config {
// ...
};
Utilisé pour récupérer et retourner les données d'une police de caractères à partir des options données.
Comment thread
ld-web marked this conversation as resolved.
Outdated

export function myProvider(config: Config): FontProvider {
return {
entrypoint: new URL('./implementation.js', import.meta.url),
config
};
};
```
#### `config`

</TabItem>
<p>

</Tabs>
**Type:** `Record<string, any>`<br />
**Default:** `undefined`
Comment thread
ArmandPhilippot marked this conversation as resolved.
Outdated
Comment thread
ArmandPhilippot marked this conversation as resolved.
Outdated
</p>

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
// ...
});
```
<p>

:::tip
**Type:** `(context: FontProviderInitContext) => Awaitable<void>`<br />
**Default:** `undefined`
Comment thread
ArmandPhilippot marked this conversation as resolved.
Outdated
Comment thread
ArmandPhilippot marked this conversation as resolved.
Outdated
</p>

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é pour exécuter une logique d'initialisation. Son contexte contient un objet `storage`, utile pour la mise en cache.
Comment thread
ArmandPhilippot marked this conversation as resolved.
Outdated

:::
#### `listFonts()`

3. Ajoutez votre fournisseur personnalisé à votre configuration de police.
<p>

```js title="astro.config.mjs" ins="myProvider()"
import { defineConfig } from "astro/config";
import { myProvider } from "./provider/config";
**Type:** `() => Awaitable<string[] | undefined>`<br />
**Default:** `undefined`
Comment thread
ArmandPhilippot marked this conversation as resolved.
Outdated
Comment thread
ArmandPhilippot marked this conversation as resolved.
Outdated
</p>

export default defineConfig({
experimental: {
Fonction de rappel optionnelle, utilisée pour retourner la liste des noms de polices disponibles.

### Supporter un registre privé
Comment thread
ld-web marked this conversation as resolved.
Outdated

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"
}]
}
});
```
}
});
```

</Steps>
### Supporter un fournisseur unifont tiers
Comment thread
ld-web marked this conversation as resolved.
Outdated

Vous pouvez définir un fournisseur de polices Astro en utilisant un fournisseur unifont sous le capot :
Comment thread
ld-web marked this conversation as resolved.
Outdated

```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

Expand Down