
# Plugin

TailwindPHP menyediakan port PHP dari plugin resmi TailwindCSS dan mengekspos PHP plugin API. Plugin mendaftarkan utilitas, komponen, dan varian; plugin dimuat dengan direktif `@plugin` dalam CSS input Anda. Plugin bawaan merupakan port 1:1 dari padanan JavaScript — selector dan outputnya sama — yang diimplementasikan dalam PHP, bukan dijalankan melalui Node. Satu pengecualian saat ini: modifier elemen pada plugin tipografi (`prose-headings:`, `prose-a:`, …) bergantung pada varian plugin, yang belum diterapkan ([#10](https://github.com/inline0/tailwindphp/issues/10)).

## Menggunakan `@plugin`

Rujuk plugin berdasarkan nama dengan `@plugin`. Plugin bawaan menggunakan nama paket npm. Pasangkan direktif dengan `@import "tailwindcss/utilities.css";` agar kelas plugin dimasukkan ke lapisan utilitas:

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

Beberapa plugin dapat dimuat bersama, dan urutannya tidak berpengaruh:

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

`@plugin` tidak dapat disarangkan di dalam at-rule lain (seperti `@media`), dan nama plugin yang belum didaftarkan akan memunculkan error.

## Opsi Plugin

Teruskan opsi ke plugin menggunakan sintaks blok CSS setelah namanya. Kunci dipetakan ke array opsi plugin:

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

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

Plugin `@tailwindcss/forms` menerima `strategy` (`base` atau `class`); `@tailwindcss/typography` menerima `className` untuk mengganti nama kelas `prose` yang dihasilkan. Lihat halaman masing-masing plugin untuk daftar opsi lengkap.

## Plugin Bawaan

| Plugin | Deskripsi |
|--------|-------------|
| `@tailwindcss/typography` | Kelas `prose` — gaya tipografi bawaan untuk teks kaya. Lihat [Tipografi](https://tailwindphp.inline0.dev/id/docs/plugins/typography). |
| `@tailwindcss/forms` | Kontrol formulir yang dapat direset dan ditata. Lihat [Formulir](https://tailwindphp.inline0.dev/id/docs/plugins/forms). |

## Plugin Kustom

Tulis plugin sendiri dengan mengimplementasikan `PluginInterface` dan menggunakan metode pada `PluginAPI` (`addUtilities`, `matchUtilities`, `addComponents`, `addVariant`, `theme`, dan lainnya). Daftarkan plugin dengan `registerPlugin(new MyPlugin())` agar nama yang dikembalikan oleh `getName()` dapat digunakan dalam direktif `@plugin "my-plugin"`:

```php
use function TailwindPHP\registerPlugin;

registerPlugin(new MyCustomPlugin());
```

Lihat [Plugin Kustom](https://tailwindphp.inline0.dev/id/docs/plugins/custom) untuk antarmuka, contoh lengkap, dan referensi metode `PluginAPI` selengkapnya.
