
# Плагины

TailwindPHP поставляется с портами PHP официальных плагинов TailwindCSS и предоставляет нативный плагин PHP API. Плагины регистрируют утилиты, компоненты и варианты; они загружаются директивой `@plugin` во входном CSS. Встроенные плагины — это 1:1-порты своих аналогов JavaScript: у них те же селекторы и выходные данные, но реализованы они на PHP, а не выполняются через Node. Сейчас есть одно исключение: модификаторы элементов плагина типографики (`prose-headings:`, `prose-a:`, …) зависят от вариантов плагина, которые пока не применяются ([#10](https://github.com/inline0/tailwindphp/issues/10)).

## Использование `@plugin`

Укажите плагин по имени с помощью `@plugin`. Для встроенных плагинов используется их имя пакета npm. Добавьте директиву `@import "tailwindcss/utilities.css";`, чтобы классы плагина попадали в слой утилит:

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

Можно загрузить несколько плагинов одновременно; их порядок не имеет значения:

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

Вложение `@plugin` в другое правило at-rule, например `@media`, не допускается. Если имя плагина не зарегистрировано, возникает ошибка.

## Параметры плагинов

Передавайте параметры плагину в блочном синтаксисе CSS после имени. Ключи соответствуют массиву параметров плагина:

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

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

Плагин `@tailwindcss/forms` принимает `strategy` (`base` или `class`); `@tailwindcss/typography` принимает `className`, чтобы переименовать создаваемый класс `prose`. Полный список параметров см. на страницах соответствующих плагинов.

## Встроенные плагины

| Плагин | Описание |
|--------|-------------|
| `@tailwindcss/typography` | Классы `prose` — типографические настройки по умолчанию для форматированного текста. См. раздел [Типографика](https://tailwindphp.inline0.dev/ru/docs/plugins/typography). |
| `@tailwindcss/forms` | Сбрасываемые и настраиваемые элементы форм. См. раздел [Формы](https://tailwindphp.inline0.dev/ru/docs/plugins/forms). |

## Пользовательские плагины

Создайте собственный плагин, реализовав `PluginInterface` и используя методы `PluginAPI` (`addUtilities`, `matchUtilities`, `addComponents`, `addVariant`, `theme` и другие). Зарегистрируйте его через `registerPlugin(new MyPlugin())`, чтобы имя, возвращаемое `getName()`, разрешалось в директиве `@plugin "my-plugin"`:

```php
use function TailwindPHP\registerPlugin;

registerPlugin(new MyCustomPlugin());
```

См. раздел [Пользовательские плагины](https://tailwindphp.inline0.dev/ru/docs/plugins/custom): описание интерфейса, полный пример и справочник по методу `PluginAPI`.
