
# Plugins

TailwindPHP inclui versões PHP dos plugins oficiais de TailwindCSS e disponibiliza uma PHP nativa de plugin API. Os plugins registram utilitários, componentes e variantes; são carregados com a diretiva `@plugin` no seu CSS de entrada. Os plugins integrados são versões 1:1 de seus equivalentes em JavaScript — mesmos seletores e saída — implementadas em PHP em vez de serem executadas por meio do Node. Uma exceção atual: os modificadores de elemento do plugin de tipografia (`prose-headings:`, `prose-a:`, …) dependem de variantes de plugin, que ainda não são aplicadas ([#10](https://github.com/inline0/tailwindphp/issues/10)).

## Usando `@plugin`

Faça referência a um plugin pelo nome usando `@plugin`. Os plugins integrados usam o nome do pacote npm. Combine a diretiva com `@import "tailwindcss/utilities.css";` para que as classes do plugin sejam emitidas na camada de utilitários:

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

É possível carregar vários plugins juntos, e a ordem não importa:

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

`@plugin` não pode ser aninhada em outra regra at, como `@media`, e um nome de plugin não registrado gera um erro.

## Opções do plugin

Passe opções a um plugin usando a sintaxe de bloco CSS após o nome. As chaves correspondem ao array de opções do plugin:

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

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

O plugin `@tailwindcss/forms` aceita `strategy` (`base` ou `class`); `@tailwindcss/typography` aceita `className` para renomear a classe `prose` gerada. Consulte as páginas de cada plugin para ver a lista completa de opções.

## Plugins integrados

| Plugin | Descrição |
|--------|-------------|
| `@tailwindcss/typography` | As classes `prose` — padrões tipográficos para texto rico. Consulte [Tipografia](https://tailwindphp.inline0.dev/pt/docs/plugins/typography). |
| `@tailwindcss/forms` | Controles de formulário redefiníveis e estilizados. Consulte [Formulários](https://tailwindphp.inline0.dev/pt/docs/plugins/forms). |

## Plugins personalizados

Crie seu próprio plugin implementando `PluginInterface` e usando os métodos de `PluginAPI` (`addUtilities`, `matchUtilities`, `addComponents`, `addVariant`, `theme` e outros). Registre-o com `registerPlugin(new MyPlugin())` para que o nome retornado por `getName()` seja resolvido em uma diretiva `@plugin "my-plugin"`:

```php
use function TailwindPHP\registerPlugin;

registerPlugin(new MyCustomPlugin());
```

Consulte [Plugins personalizados](https://tailwindphp.inline0.dev/pt/docs/plugins/custom) para ver a interface, um exemplo completo e a referência completa dos métodos de `PluginAPI`.
