Plugin Kustom
Plugin kustom adalah kelas PHP yang mengimplementasikan TailwindPHP\Plugin\PluginInterface. Plugin menerima instance PluginAPI dan menggunakannya untuk mendaftarkan utilitas statis dan fungsional, komponen, serta varian. Setelah didaftarkan dengan registerPlugin(), plugin dapat dipanggil berdasarkan nama dalam direktif @plugin — mekanisme yang sama dengan yang digunakan plugin tipografi dan formulir bawaan.
PluginInterface
Implementasikan tiga metode:
namespace TailwindPHP\Plugin;
interface PluginInterface
{
public function getName(): string;
public function __invoke(PluginAPI $api, array $options = []): void;
public function getThemeExtensions(array $options = []): array;
}
getName()mengembalikan identifier yang digunakan dalam@plugin "...".__invoke()menjalankan plugin dan mendaftarkan semuanya melalui$api. Array$optionsmemuat nilai dari blok@pluginCSS.getThemeExtensions()mengembalikan namespace tema yang akan digabungkan sebelum utilitas dibuat (kembalikan[]jika tidak ada).
Contoh
use TailwindPHP\Plugin\PluginInterface;
use TailwindPHP\Plugin\PluginAPI;
class MyCustomPlugin implements PluginInterface
{
public function getName(): string
{
return 'my-custom-plugin';
}
public function __invoke(PluginAPI $api, array $options = []): void
{
// Static utilities
$api->addUtilities([
'.btn' => [
'padding' => '0.5rem 1rem',
'border-radius' => '0.25rem',
'font-weight' => '600',
],
'.btn-primary' => [
'background-color' => 'blue',
'color' => 'white',
],
]);
// Functional utilities (generates .gutter-sm, .gutter-md, .gutter-lg)
$api->matchUtilities(
[
'gutter' => fn ($value) => ['padding-inline' => $value],
],
['values' => ['sm' => '1rem', 'md' => '2rem', 'lg' => '3rem']]
);
// Component classes (sorted into the components layer)
$api->addComponents([
'.card' => [
'background-color' => 'white',
'border-radius' => '0.5rem',
'padding' => '1rem',
],
]);
// Custom variant (see the note below the API reference)
$api->addVariant('hocus', '&:hover, &:focus');
// Read a theme value
$primary = $api->theme('colors.blue.500', '#3b82f6');
}
public function getThemeExtensions(array $options = []): array
{
return []; // Return theme additions if needed
}
}
Referensi PluginAPI
API mencerminkan API plugin TailwindCSS:
| Metode | Signature | Tujuan |
|---|---|---|
addBase |
addBase(array $css): void |
Menambahkan gaya lapisan dasar. |
addUtilities |
addUtilities(array $utilities, array $options = []): void |
Mendaftarkan kelas utilitas statis dengan selector sebagai kunci. |
matchUtilities |
matchUtilities(array $utilities, array $options = []): void |
Mendaftarkan utilitas fungsional; $options['values'] menyediakan peta nilai, $options['supportsNegativeValues'] mengaktifkan nilai negatif. |
addComponents |
addComponents(array $components, array $options = []): void |
Mendaftarkan kelas komponen (lapisan komponen). |
matchComponents |
matchComponents(array $components, array $options = []): void |
Mendaftarkan komponen fungsional dengan peta nilai. |
addVariant |
addVariant(string $name, string|array $variant): void |
Mendaftarkan varian statis dari selector. |
matchVariant |
matchVariant(string $name, callable $callback, array $options = []): void |
Mendaftarkan varian fungsional; $options['values'] menyediakan peta nilai. |
theme |
theme(string $path, mixed $defaultValue = null): mixed |
Membaca nilai tema berdasarkan jalur titik (e.g. colors.blue.500). |
config |
config(?string $path = null, mixed $defaultValue = null): mixed |
Membaca nilai konfigurasi berdasarkan jalur titik, atau seluruh konfigurasi jika $path bernilai null. |
prefix |
prefix(string $className): string |
Menerapkan prefiks yang dikonfigurasi ke nama kelas. |
Callback yang diteruskan ke matchUtilities, matchComponents, dan matchVariant menerima nilai serta array argumen kedua yang berisi kunci modifier.
Pilih nama utilitas yang belum digunakan oleh Tailwind inti. Jika utilitas plugin memakai nama yang sama dengan utilitas inti (misalnya tab-*, yang digunakan Tailwind inti untuk tab-size sejak v4.3), kedua deklarasi masuk ke aturan yang sama dan utilitas inti ditempatkan terakhir, sehingga menang: plugin tab-4 yang dipetakan ke 7 tetap menghasilkan tab-size: 4.
Masalah yang diketahui: varian yang didaftarkan dengan
addVariant(), serta varian per nilai yang didaftarkan olehmatchVariant(), belum diterapkan dalam rilis saat ini.hocus:flexdari contoh di atas dikompilasi menjadi.hocus\:flex { display: flex; }tanpa selector:hover/:focus(#10). Sampai masalah ini diperbaiki, definisikan varian dalam CSS dengan@custom-variant, yang berfungsi:@custom-variant hocus (&:hover, &:focus);.
Mendaftarkan dan menggunakan
Daftarkan instance plugin, lalu rujuk plugin tersebut menggunakan nama dari getName():
use TailwindPHP\tw;
use function TailwindPHP\registerPlugin;
registerPlugin(new MyCustomPlugin());
$css = tw::generate(
'<div class="btn btn-primary card gutter-md">…</div>',
'@plugin "my-custom-plugin"; @import "tailwindcss/utilities.css";'
);
Lihat Plugin untuk direktif @plugin, dan Tema untuk nilai yang disediakan melalui $api->theme().