
# Directive @source

`@source` se trouve dans votre entrée CSS. Ses formes `inline()` ajoutent ou suppriment des classes candidates et fonctionnent partout. Ses formes de chemin désignent les fichiers de modèles à analyser pour repérer les noms de classes ; seul le [CLI](https://tailwindphp.inline0.dev/fr/docs/cli) analyse les fichiers, sans encore appliquer les chemins indiqués (voir [Utilisation des chemins](#how-paths-are-used)).

```css
@import "tailwindcss";
@source "./templates";
```

Les directives `@source` sont lues pendant la compilation et retirées du résultat : elles n’apparaissent jamais dans le CSS généré. Les chemins doivent être entre guillemets ; les guillemets simples et doubles sont acceptés.

## Chemins, motifs glob et négation

La forme chemin accepte un répertoire, un motif glob ou un chemin nié ; les directives s’accumulent :

```css
@source "./templates";              /* a directory */
@source "./components/**/*.php";    /* a glob */
@source not "./templates/legacy";   /* an exclusion */
```

### Utilisation des chemins

Le compilateur enregistre chaque directive de chemin dans la liste `sources` du tableau renvoyé par `TailwindPHP\compile()`, sous forme de `['base' => …, 'pattern' => …, 'negated' => …]` dont `base` provient de l’option de compilation `base`. Il ne lit jamais les fichiers lui-même.

- `tw::generate()`, `tw::compile()` et `TailwindCompiler` ne compilent que le contenu que vous leur transmettez. Les directives de chemin n’y ont aucun effet.
- Le [CLI](https://tailwindphp.inline0.dev/fr/docs/cli) lit `sources`, mais dans la version actuelle, il analyse récursivement le répertoire du fichier d’entrée pour chaque chemin non nié, quels que soient le chemin ou le motif glob indiqué, et ignore entièrement les chemins `not`, qui n’excluent donc rien ([#8](https://github.com/inline0/tailwindphp/issues/8)). [Fichiers analysés par CLI](https://tailwindphp.inline0.dev/fr/docs/cli#what-the-cli-scans) fournit les détails et une structure qui fonctionne aujourd’hui.

## Candidats intégrés

`@source inline(...)` force l’inclusion de classes dans le résultat, même si elles n’apparaissent jamais dans les fichiers analysés ; cela sert notamment aux noms de classes assemblés dynamiquement à l’exécution :

```css
@source inline("flex p-4 m-2");
```

Les candidats intégrés prennent également en charge les variantes :

```css
@source inline("hover:bg-blue-500 focus:ring-2");
```

### Développement des accolades

Les motifs intégrés développent les groupes d’accolades, ce qui permet d’énumérer un grand nombre de candidats de façon concise :

```css
@source inline("p-{1,2,4}");
/* Generates p-1, p-2, and p-4 */

@source inline("text-{red,blue}-500");
/* Generates text-red-500 and text-blue-500 */
```

## Candidats intégrés ignorés

`@source not inline(...)` fait l’inverse de `inline()` : il retire du résultat les candidats correspondants, même s’ils ont été trouvés dans votre contenu. Le développement des accolades fonctionne également ici :

```css
@source not inline("legacy");
@source not inline("p-{1,2}");
```

## Règles de validation

`@source` est une instruction, pas un bloc. Le compilateur rejette :

- Une directive avec un corps — `@source cannot have a body.`
- Une directive imbriquée (dans `@media`, par exemple) — `@source cannot be nested.`
- Un chemin sans guillemets — `@source paths must be quoted.`

```css
/* Invalid — throws "`@source` cannot have a body." */
@source "./src" {
    .some-style { color: red; }
}

/* Invalid — throws "`@source` paths must be quoted." */
@source ./src;
```

Consultez [CLI](https://tailwindphp.inline0.dev/fr/docs/cli) pour les compilations à partir de fichiers et [Imports](https://tailwindphp.inline0.dev/fr/docs/usage/imports) pour résoudre `@import` et les modules virtuels.
