
# Directiva @source

`@source` se află în intrarea CSS. Formele sale `inline()` adaugă sau elimină candidați de clase și funcționează peste tot. Formele sale cu căi indică fișierele șablon care trebuie scanate pentru nume de clase; doar [CLI](https://tailwindphp.inline0.dev/ro/docs/cli) scanează fișierele și, deocamdată, nu aplică căile furnizate (consultați [Cum sunt folosite căile](#how-paths-are-used)).

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

Directivele `@source` sunt citite în timpul compilării și eliminate din rezultat — nu apar niciodată în CSS generat. Căile trebuie puse între ghilimele; sunt acceptate atât ghilimelele simple, cât și cele duble.

## Căi, globuri și negare

Forma cu cale acceptă un director, un glob sau o cale negată, iar directivele se acumulează:

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

### Cum sunt folosite căile

Compilatorul înregistrează fiecare directivă de cale în lista `sources` a tabloului returnat de `TailwindPHP\compile()`, ca `['base' => …, 'pattern' => …, 'negated' => …]` cu `base` preluat din opțiunea de compilare `base`. Nu citește niciodată fișierele.

- `tw::generate()`, `tw::compile()` și `TailwindCompiler` compilează doar conținutul transmis. Directivele de cale nu au niciun efect aici.
- [CLI](https://tailwindphp.inline0.dev/ro/docs/cli) citește `sources`, dar în versiunea curentă scanează recursiv directorul fișierului de intrare pentru fiecare cale nenegată, indiferent de ce indică acea cale sau glob, și ignoră complet căile `not`, deci acestea nu exclud nimic ([#8](https://github.com/inline0/tailwindphp/issues/8)). [Ce scanează CLI](https://tailwindphp.inline0.dev/ro/docs/cli#what-the-cli-scans) oferă detalii și o structură care funcționează în prezent.

## Candidați în linie

`@source inline(...)` forțează includerea claselor în rezultat chiar dacă nu apar niciodată în fișierele scanate — util pentru nume de clase asamblate dinamic în timpul execuției:

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

Șabloanele de candidați în linie acceptă și variante:

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

### Extinderea acoladelor

Șabloanele în linie extind grupurile dintre acolade, astfel încât puteți enumera compact mulți candidați:

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

## Candidați în linie ignorați

`@source not inline(...)` face opusul lui `inline()` — elimină din rezultat candidații care corespund, chiar dacă au fost găsiți în conținutul dvs. Funcționează și extinderea acoladelor:

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

## Reguli de validare

`@source` este o instrucțiune, nu un bloc. Compilatorul respinge:

- O directivă cu corp — `@source cannot have a body.`
- O directivă imbricată (de exemplu, în interiorul lui `@media`) — `@source cannot be nested.`
- O cale fără ghilimele — `@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;
```

Consultați [CLI](https://tailwindphp.inline0.dev/ro/docs/cli) pentru compilări bazate pe fișiere și [Importuri](https://tailwindphp.inline0.dev/ro/docs/usage/imports) pentru rezolvarea lui `@import` și a modulelor virtuale.
