
# Plugin

TailwindPHP include port PHP dei plugin ufficiali di TailwindCSS ed espone un'API nativa per i plugin di PHPAPI. I plugin registrano utility, componenti e varianti; vengono caricati con la direttiva `@plugin` nel vostro CSS di input. I plugin integrati sono port 1:1 delle controparti di JavaScript: stessi selettori e stesso output, implementati in PHP anziché eseguiti tramite Node. Un'eccezione attuale: i modificatori degli elementi del plugin tipografico (`prose-headings:`, `prose-a:`, …) si basano sulle varianti dei plugin, che non vengono ancora applicate ([issue #10](https://github.com/inline0/tailwindphp/issues/10)).

## Uso di `@plugin`

Richiama un plugin per nome con `@plugin`. I plugin integrati usano il nome del rispettivo pacchetto npm. Abbina la direttiva a `@import "tailwindcss/utilities.css";` affinché le classi del plugin vengano incluse nel livello delle utility:

```php
use TailwindPHP\tw;

$css = tw::generate([
    'content' => '<article class="prose prose-lg"><h1>Hello</h1><p>Content here</p></article>',
    'css' => '
        @plugin "@tailwindcss/typography";
        @import "tailwindcss/utilities.css";
    ',
]);
```

È possibile caricare più plugin insieme; l'ordine non è rilevante:

```css
@plugin "@tailwindcss/typography";
@plugin "@tailwindcss/forms";
@import "tailwindcss/utilities.css";
```

`@plugin` non può essere annidato dentro un'altra at-rule (come `@media`); un nome di plugin non registrato genera un errore.

## Opzioni dei plugin

Passa le opzioni a un plugin usando la sintassi a blocchi CSS dopo il nome. Le chiavi corrispondono all'array di opzioni del plugin:

```css
@plugin "@tailwindcss/forms" {
    strategy: "class";
}

@plugin "@tailwindcss/typography" {
    className: "markdown";
}
```

Il plugin `@tailwindcss/forms` accetta `strategy` (`base` o `class`); `@tailwindcss/typography` accetta `className` per rinominare la classe `prose` generata. Consulta le pagine dei singoli plugin per l'elenco completo delle opzioni.

## Plugin integrati

| Plugin | Descrizione |
|--------|-------------|
| `@tailwindcss/typography` | Le classi `prose` — stili tipografici predefiniti per contenuti formattati. Consulta [Tipografia](https://tailwindphp.inline0.dev/it/docs/plugins/typography). |
| `@tailwindcss/forms` | Controlli dei moduli ripristinabili e personalizzabili. Consulta [Moduli](https://tailwindphp.inline0.dev/it/docs/plugins/forms). |

## Plugin personalizzati

Crea il tuo plugin implementando `PluginInterface` e usando i metodi di `PluginAPI` (`addUtilities`, `matchUtilities`, `addComponents`, `addVariant`, `theme` e altri). Registralo con `registerPlugin(new MyPlugin())` affinché il nome restituito da `getName()` venga risolto in una direttiva `@plugin "my-plugin"`:

```php
use function TailwindPHP\registerPlugin;

registerPlugin(new MyCustomPlugin());
```

Consulta [Plugin personalizzati](https://tailwindphp.inline0.dev/it/docs/plugins/custom) per l'interfaccia, un esempio completo e il riferimento completo al metodo `PluginAPI`.
