
# Compatibilitate și actualizare

Această pagină reunește informațiile necesare înainte de a face o actualizare sau de a vă baza pe un rezultat exact: cerințele de execuție, versiunea TailwindCSS urmată de portare, diferențele deliberate ale TailwindPHP față de TailwindCSS și notele pentru fiecare versiune. Istoricul complet este în [CHANGELOG.md](https://github.com/inline0/tailwindphp/blob/main/CHANGELOG.md).

## Cerințe

- **PHP 8.2 sau o versiune ulterioară.** Suita de teste rulează pe PHP 8.2, 8.3 și 8.4.
- **Extensiile `ctype` și `mbstring`.** Compilatorul apelează `ctype_*` și `mb_chr()`. Ambele sunt incluse în majoritatea compilărilor PHP și în imaginile oficiale Docker, dar `composer.json` încă nu le declară ([#11](https://github.com/inline0/tailwindphp/issues/11)), astfel că o compilare fără ele instalează pachetul, dar eșuează la execuție.
- **Opțional: `pcntl`** permite modului `--watch` al CLI să se oprească fără erori la `SIGINT`/`SIGTERM`. Fără acesta, modul de monitorizare funcționează în continuare.

Nu sunt implicate Node.js, FFI sau binare native.

## Versiunea TailwindCSS urmărită

Versiunea 1.7.0 urmărește **TailwindCSS v4.3.3**. Depozitul din amonte este fixat ca submodul git în `reference/tailwindcss`, suitele sale de teste sunt extrase din acel checkout fixat, iar testele 4,427 rulează la fiecare push (consultați [Performanță și testare](https://tailwindphp.inline0.dev/ro/docs/advanced/performance)). Pluginurile portate urmează `@tailwindcss/typography` și `@tailwindcss/forms`, iar utilitarele pentru clase urmează clsx, tailwind-merge și CVA, toate fixate în același mod.

## Diferențe cunoscute față de TailwindCSS

### Detalii despre serializare

CSS generat corespunde suitelor de teste de referință. Câteva detalii de serializare diferă de ceea ce afișează TailwindCSS CLI; niciuna dintre acestea nu modifică cascada:

- Prefixe de vendor: când referința emite atât linia `-webkit-*` scrisă de autor, cât și una generată, TailwindPHP emite o singură linie.
- Pseudo-elementele transformate pentru versiuni mai vechi (`::file-selector-button`, `::-webkit-datetime-edit-*`) rămân în listele de selectori scrise de autor, în loc să fie separate în câte o regulă pentru fiecare pseudo-element.
- Șirurile scrise de autor între apostrofuri simple rămân astfel (`'Segoe UI'`), în loc să fie normalizate la ghilimele duble.
- Proprietățile longhand care apar împreună nu sunt combinate într-o proprietate shorthand (ieșirea proprie a lui Tailwind nu are nevoie de acest lucru).
- `.p-0` păstrează `padding: 0px` acolo unde referința CLI emite `padding: 0`, deoarece corpusul de teste extras fixează forma `0px`. Minificatorul o scurtează la `0`.

### Ce nu este inclus

TailwindPHP este un compilator CSS. Nu include instrumentele editorului din ecosistemul Tailwind (IntelliSense, completare automată, sortarea claselor) sau hărțile sursă, așadar CLI nu are o opțiune `--map`.

### Scanarea conținutului

`tw::generate()` și `TailwindCompiler::generate()` citesc numele claselor doar din atributele `class` și `className`. Pentru numele claselor aflate în șirurile PHP sau JavaScript, folosiți [`tw::extractCandidatesFromStrings()`](https://tailwindphp.inline0.dev/ro/docs/api#twextractcandidatesfromstrings) sau `@source inline("…")`. Formele de cale ale lui `@source` sunt ignorate de API și respectate doar parțial de CLI (vedeți mai jos).

### Probleme cunoscute în versiunea actuală

| Domeniu | Comportamentul actual | Problemă |
|---|---|---|
| CLI `@source` | Căile și globurile nu se aplică; în schimb, este scanat directorul fișierului de intrare, iar `@source not` nu exclude nimic. Consultați [Ce scanează CLI](https://tailwindphp.inline0.dev/ro/docs/cli#what-the-cli-scans) | [#8](https://github.com/inline0/tailwindphp/issues/8) |
| CLI `--optimize` | Minifică, la fel ca `--minify` | [#9](https://github.com/inline0/tailwindphp/issues/9) |
| Opțiuni lungi de tip CLI | `--input file.css` (separate prin spații) este ignorat; folosiți `--input=file.css` sau `-i file.css` | [#13](https://github.com/inline0/tailwindphp/issues/13) |
| Variante de plugin | Variantele `addVariant()`/`matchVariant()` și modificatorii elementelor tipografice (`prose-headings:` …) se compilează fără selectorul lor | [#10](https://github.com/inline0/tailwindphp/issues/10) |
| Mixine `@apply` | `@apply --my-mixin;` este eliminat în loc să fie transmis mai departe | [#12](https://github.com/inline0/tailwindphp/issues/12) |
| Importuri de referință | Rezultatul este gol când un import de referință precedă importul de utilitare; `@import "tailwindcss" reference` nu are niciun efect | [#14](https://github.com/inline0/tailwindphp/issues/14) |

## Note de actualizare

### 1.7.0

- **Rezultatul se modifică la nivel de octeți** față de 1.6.x, deși rămâne echivalent funcțional cu referința TailwindCSS v4.3.3. Printre modificările vizibile:
  - Multiplicatorii de spațiere: `p-1` emite `padding: var(--spacing)` în loc de un `calc()`, iar multiplicatorul `0` emite o lungime simplă de zero.
  - Fracțiile sunt convertite în procente: `w-1/2` emite `width: 50%`.
  - Culori: luminozitatea `oklch()`/`oklab()` este serializată ca procent (`oklch(62.3% .214 259.815)`); `white` și `black` sunt scurtate la `#fff` și `#000`.
  - Pseudo-elementele CSS2 sunt serializate cu două puncte simple (`:before`, `:after`, `:first-letter`, `:first-line`).
  - Regulile imbricate `@media`/`@supports`/`@container` sunt aplatizate pe loc, în ordinea sursei, în loc să fie mutate la final; declarațiile sunt reordonate după ordinea folosită de lightningcss, iar declarațiile duplicate mascate de altele sunt eliminate.
- **Cache-urile bazate pe rezultat se golesc o dată.** Cheia cache-ului de fișiere din `tw::generate()` nu include versiunea TailwindPHP, așa că rulați `tw::clearCache()` (sau directorul transmis ca `cache`) după actualizare. [cache-ul stării compilatorului](https://tailwindphp.inline0.dev/ro/docs/advanced/caching#compiler-state-cache) se invalidează singur.
- **Nou:** `@variant` în CSS scris de autor, mixine CSS în `@apply`, `@media reference` și `@import "…" reference`, motorul complet `--value()`/`--modifier()` pentru `@utility` funcționale, validarea mai strictă a numelor `@utility` și opțiunea `polyfills` din `tw::compile()`.

### 1.6.1

- **Nou:** utilitarul `container` (`width: 100%` plus câte un `max-width` pentru fiecare punct de întrerupere).
- Variabilele `--tw-*` compuse (translate, scale, rotate, skew, filtre și altele) sunt acum înregistrate în `@property`, astfel încât foile de stil primesc aceste reguli `@property`, iar transformări precum `translate-x-7` au efect în browser.

### 1.6.0

- **Nou:** cache-ul persistent pentru starea compilatorului (`stateCacheFile` pe `tw::compile()` și `TailwindCompiler`, `StateCache\compileCssCached()`) și funcțiile separate `parseCssState()`/`finalizeCssState()`/`compileParsed()`. Apelurile existente funcționează exact ca înainte.

### 1.5.0

- Subclasele `TailwindCompiler` care suprascriu `generate()` sau `css()` trebuie să adauge parametrul opțional `bool $minify = false`; PHP respinge suprascrierile care elimină un parametru opțional al clasei părinte.
- Rezultatul minificat este produs de serializer, astfel că octeții minificați diferă puțin de 1.4.x (cache-urile bazate pe rezultatul minificat se golesc o dată).
- **Nou:** `generateExact()` și `cssExact()` pentru CSS per pagină, generate de un singur compilator cu durată lungă de viață.
