
# Complementos

TailwindPHP incluye ports PHP de los complementos oficiales de TailwindCSS y ofrece una interfaz de complementos PHP nativa API. Los complementos registran utilidades, componentes y variantes; se cargan con la directiva `@plugin` en el archivo de entrada CSS. Los complementos integrados son ports 1:1 de sus equivalentes de JavaScript —con los mismos selectores y resultados—, implementados en PHP en lugar de ejecutarse mediante Node. Actualmente hay una excepción: los modificadores de elementos del complemento de tipografía (`prose-headings:`, `prose-a:`, …) dependen de variantes de complementos, que aún no se aplican ([#10](https://github.com/inline0/tailwindphp/issues/10)).

## Uso de `@plugin`

Haz referencia a un complemento por nombre con `@plugin`. Los complementos integrados usan el nombre de su paquete npm. Combina la directiva con `@import "tailwindcss/utilities.css";` para que las clases del complemento se emitan en la capa de utilidades:

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

Se pueden cargar varios complementos a la vez, sin importar el orden:

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

`@plugin` no se puede anidar dentro de otra regla at ni (como `@media`); si el nombre del complemento no está registrado, se produce un error.

## Opciones de complementos

Pasa opciones a un complemento con la sintaxis de bloque CSS después del nombre. Las claves se asignan al arreglo de opciones del complemento:

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

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

El complemento `@tailwindcss/forms` acepta `strategy` (`base` o `class`); `@tailwindcss/typography` acepta `className` para cambiar el nombre de la clase `prose` generada. Consulta las páginas de cada complemento para ver todas las opciones.

## Complementos integrados

| Complemento | Descripción |
|--------|-------------|
| `@tailwindcss/typography` | Las clases `prose`: valores tipográficos predeterminados para texto enriquecido. Consulta [Tipografía](https://tailwindphp.inline0.dev/es/docs/plugins/typography). |
| `@tailwindcss/forms` | Controles de formulario restablecibles y fáciles de estilizar. Consulta [Formularios](https://tailwindphp.inline0.dev/es/docs/plugins/forms). |

## Complementos personalizados

Crea tu propio complemento implementando `PluginInterface` y usando los métodos de `PluginAPI` (`addUtilities`, `matchUtilities`, `addComponents`, `addVariant`, `theme` y otros). Regístralo con `registerPlugin(new MyPlugin())` para que el nombre que devuelve `getName()` se resuelva en una directiva `@plugin "my-plugin"`:

```php
use function TailwindPHP\registerPlugin;

registerPlugin(new MyCustomPlugin());
```

Consulta [Complementos personalizados](https://tailwindphp.inline0.dev/es/docs/plugins/custom) para ver la interfaz, un ejemplo completo y la referencia completa de métodos de `PluginAPI`.
