Власні плагіни
Власний плагін — це клас PHP, що реалізує TailwindPHP\Plugin\PluginInterface. Він отримує екземпляр PluginAPI і використовує його для реєстрації статичних і функціональних утиліт, компонентів та варіантів. Після реєстрації через registerPlugin() плагін знаходиться за назвою в директиві @plugin — так само, як вбудовані плагіни типографіки й форм.
PluginInterface
Реалізуйте три методи:
namespace TailwindPHP\Plugin;
interface PluginInterface
{
public function getName(): string;
public function __invoke(PluginAPI $api, array $options = []): void;
public function getThemeExtensions(array $options = []): array;
}
getName()повертає ідентифікатор, що використовується в@plugin "...".__invoke()запускає плагін і реєструє всі його складники через$api. Масив$optionsмістить значення з блока@pluginCSS.getThemeExtensions()повертає простори імен теми для об’єднання перед генерацією утиліт (поверніть[], якщо їх немає).
Приклад
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
}
}
Довідник PluginAPI
API повторює інтерфейс плагінів TailwindCSS API:
| Метод | Сигнатура | Призначення |
|---|---|---|
addBase |
addBase(array $css): void |
Додає стилі базового шару. |
addUtilities |
addUtilities(array $utilities, array $options = []): void |
Реєструє статичні класи утиліт за селектором. |
matchUtilities |
matchUtilities(array $utilities, array $options = []): void |
Реєструє функціональні утиліти; $options['values'] задає мапу значень, $options['supportsNegativeValues'] вмикає від’ємні значення. |
addComponents |
addComponents(array $components, array $options = []): void |
Реєструє класи компонентів (шар компонентів). |
matchComponents |
matchComponents(array $components, array $options = []): void |
Реєструє функціональні компоненти з мапою значень. |
addVariant |
addVariant(string $name, string|array $variant): void |
Реєструє статичний варіант за селектором. |
matchVariant |
matchVariant(string $name, callable $callback, array $options = []): void |
Реєструє функціональний варіант; $options['values'] задає мапу значень. |
theme |
theme(string $path, mixed $defaultValue = null): mixed |
Читає значення теми за шляхом із крапками (e.g. colors.blue.500). |
config |
config(?string $path = null, mixed $defaultValue = null): mixed |
Читає значення конфігурації за шляхом із крапками або всю конфігурацію, якщо $path дорівнює null. |
prefix |
prefix(string $className): string |
Застосовує налаштований префікс до назви класу. |
Зворотний виклик, переданий у matchUtilities, matchComponents і matchVariant, отримує значення та масив другого аргументу з ключем modifier.
Вибирайте назви утиліт, які ядро Tailwind ще не використовує. Якщо назва утиліти плагіна збігається з назвою основної утиліти (наприклад, tab-*, яку ядро Tailwind використовує для tab-size, починаючи з v4.3), обидва оголошення потрапляють в одне правило, причому основне йде останнім і перемагає: утиліта плагіна tab-4, зіставлена з 7, усе одно створює tab-size: 4.
Відома проблема: варіанти, зареєстровані через
addVariant(), і варіанти для окремих значень, які реєструєmatchVariant(), у поточному випуску не застосовуються.hocus:flexз наведеного вище прикладу компілюється в.hocus\:flex { display: flex; }без селектора:hover/:focus(#10). Поки це не виправлено, визначайте варіант у CSS за допомогою@custom-variant— це працює:@custom-variant hocus (&:hover, &:focus);.
Реєстрація та використання
Зареєструйте екземпляр плагіна, а потім посилайтеся на нього за назвою з 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";'
);
Директиву @plugin див. у розділі Plugins, а значення, доступні через $api->theme(), — у Theme.