
# Suderinamumas ir naujinimas

Šiame puslapyje rasite tai, ką reikia žinoti prieš naujinant arba tikintis tikslios išvesties: vykdymo aplinkos reikalavimus, kurio TailwindCSS leidimo laikosi prievadas, kuo TailwindPHP sąmoningai skiriasi nuo TailwindCSS ir kiekvieno leidimo pastabas. Visą istoriją rasite čia: [CHANGELOG.md](https://github.com/inline0/tailwindphp/blob/main/CHANGELOG.md).

## Reikalavimai

- **PHP 8.2 arba naujesnė versija.** Testų rinkinys veikia su PHP 8.2, 8.3 ir 8.4.
- **Plėtiniai `ctype` ir `mbstring`.** Kompiliatorius iškviečia `ctype_*` ir `mb_chr()`. Abu plėtiniai įtraukti į daugumą PHP sąrankų ir oficialius Docker atvaizdus, bet `composer.json` jų dar nedeklaruoja ([#11](https://github.com/inline0/tailwindphp/issues/11)), todėl be jų įdiegiant paketą vykdymo metu kyla klaida.
- **Pasirinktinai: `pcntl`** leidžia CLI `--watch` režimui tvarkingai sustoti ties `SIGINT`/`SIGTERM`. Be jo stebėjimo režimas vis tiek veikia.

Nenaudojama Node.js, FFI ar savųjų dvejetainių failų.

## Kurio TailwindCSS leidimo laikomasi

Leidimas 1.7.0 laikosi **TailwindCSS v4.3.3**. Pradinės saugyklos versija fiksuojama kaip git submodulis faile `reference/tailwindcss`, jos testų rinkiniai išgaunami iš šios fiksuotos kopijos, o 4,427 testai vykdomi po kiekvieno išsiuntimo (žr. [Našumas ir testavimas](https://tailwindphp.inline0.dev/lt/docs/advanced/performance)). Perkelti papildiniai naudoja `@tailwindcss/typography` ir `@tailwindcss/forms`, o klasės įrankiai — clsx, tailwind-merge ir CVA; visų jų versijos fiksuojamos tuo pačiu būdu.

## Žinomi skirtumai nuo TailwindCSS

### Serializavimo ypatumai

Sugeneruotas CSS atitinka etaloninių testų rinkinius. Kai kurios serializavimo detalės skiriasi nuo to, ką pateikia TailwindCSS CLI, tačiau nė viena iš jų nepakeičia kaskados:

- Tiekėjų prefiksai: kai etalonas pateikia ir autoriaus parašytą eilutę `-webkit-*`, ir sugeneruotą, TailwindPHP pateikia vieną eilutę.
- Žemesnio lygio pseudolementai (`::file-selector-button`, `::-webkit-datetime-edit-*`) lieka autoriaus parašytuose selektorių sąrašuose, užuot buvę išskaidyti į po vieną taisyklę kiekvienam pseudolementui.
- Autoriaus parašytos eilutės su viengubomis kabutėmis lieka su viengubomis kabutėmis (`'Segoe UI'`), užuot buvusios normalizuotos į dvigubas kabutes.
- Kartu pasitaikantys ilgieji savybių pavadinimai nesujungiami į trumpinį (Tailwind išvestyje jo niekada nereikia).
- `.p-0` išsaugo `padding: 0px`, kai etalonas CLI pateikia `padding: 0`, nes ištrauktame testų korpuse naudojama `0px` forma. Minifikatorius ją sutrumpina iki `0`.

### Neįtraukta

TailwindPHP yra CSS kompiliatorius. Jame nėra Tailwind ekosistemos redaktoriaus įrankių (IntelliSense, automatinio užbaigimo, klasių rūšiavimo) ir išeities kodų žemėlapių, todėl CLI neturi parinkties `--map`.

### Turinio nuskaitymas

`tw::generate()` ir `TailwindCompiler::generate()` skaito klasių pavadinimus tik iš `class` ir `className` atributų. Jei klasių pavadinimai saugomi PHP arba JavaScript eilutėse, naudokite [`tw::extractCandidatesFromStrings()`](https://tailwindphp.inline0.dev/lt/docs/api#twextractcandidatesfromstrings) arba `@source inline("…")`. `@source` kelio formų API nepaiso, o CLI jas palaiko tik iš dalies (žr. toliau).

### Žinomos dabartinio leidimo problemos

| Sritis | Dabartinė elgsena | Problema |
|---|---|---|
| CLI `@source` | Keliai ir glob šablonai netaikomi; vietoj jų nuskaitomas įvesties failo katalogas, o `@source not` nieko nepašalina. Žr. [Ką nuskaito CLI](https://tailwindphp.inline0.dev/lt/docs/cli#what-the-cli-scans) | [#8](https://github.com/inline0/tailwindphp/issues/8) |
| CLI `--optimize` | Minifikuoja, kaip `--minify` | [#9](https://github.com/inline0/tailwindphp/issues/9) |
| Ilgosios CLI parinktys | Nepaisoma `--input file.css` (atskirta tarpais); naudokite `--input=file.css` arba `-i file.css` | [#13](https://github.com/inline0/tailwindphp/issues/13) |
| Papildinių variantai | `addVariant()`/`matchVariant()` variantai ir tipografijos elementų modifikatoriai (`prose-headings:` …) kompiliuojami be selektoriaus | [#10](https://github.com/inline0/tailwindphp/issues/10) |
| `@apply` mišiniai | `@apply --my-mixin;` pašalinamas, užuot perduotas toliau | [#12](https://github.com/inline0/tailwindphp/issues/12) |
| Etaloniniai importai | Išvestis tuščia, kai etaloninis importas nurodytas prieš paslaugų importą; `@import "tailwindcss" reference` neveikia | [#14](https://github.com/inline0/tailwindphp/issues/14) |

## Atnaujinimo pastabos

### 1.7.0

- **Išvesties baitai skiriasi** nuo 1.6.x, nors funkciniu požiūriu jie atitinka TailwindCSS v4.3.3 etaloną. Matomi pakeitimai:
  - Tarpų daugikliai: `p-1` pateikia `padding: var(--spacing)` vietoj `calc()`, o daugiklis `0` pateikia paprastą nulio ilgio reikšmę.
  - Trupmenos paverčiamos procentais: `w-1/2` pateikia `width: 50%`.
  - Spalvos: `oklch()`/`oklab()` šviesumas serializuojamas procentais (`oklch(62.3% .214 259.815)`), `white` ir `black` sutrumpinami iki `#fff` ir `#000`.
  - CSS2 pseudoelementai serializuojami su vienu dvitaškiu (`:before`, `:after`, `:first-letter`, `:first-line`).
  - Įdėtinės `@media`/`@supports`/`@container` taisyklės išskleidžiamos vietoje, išlaikant pradinę tvarką, užuot perkeltos į pabaigą; deklaracijos perrikiuojamos taip, kaip jas išrikiuoja „lightningcss“; pašalinamos nustelbtos pasikartojančios deklaracijos.
- **Podėliai, kurių raktai paremti išvestimi, vieną kartą taps negaliojantys.** `tw::generate()` failų podėlio rakte nėra TailwindPHP versijos, todėl atnaujinę paleiskite `tw::clearCache()` (arba išvalykite katalogą, kurį nurodėte kaip `cache`). [kompiliatoriaus būsenos podėlis](https://tailwindphp.inline0.dev/lt/docs/advanced/caching#compiler-state-cache) pats panaikina pasenusius įrašus.
- **Nauja:** `@variant` autoriaus CSS, CSS mišiniai `@apply`, `@media reference` ir `@import "…" reference`, visas `--value()`/`--modifier()` variklis funkciniam `@utility`, griežtesnis `@utility` pavadinimų tikrinimas ir `tw::compile()` parinktis `polyfills`.

### 1.6.1

- **Nauja:** įrankis `container` (`width: 100%` ir po vieną `max-width` kiekvienam lūžio taškui).
- Sudėtiniai `--tw-*` kintamieji (perstūmimas, mastelio keitimas, pasukimas, pakreipimas, filtrai ir kiti) dabar registruojami `@property`, todėl stiliaus lapuose sukuriamos šios `@property` taisyklės, o naršyklėje pradeda veikti transformacijos, tokios kaip `translate-x-7`.

### 1.6.0

- **Nauja:** ilgalaikis kompiliatoriaus būsenos podėlis (`stateCacheFile` su `tw::compile()` ir `TailwindCompiler`, `StateCache\compileCssCached()`) ir atskiros funkcijos `parseCssState()`/`finalizeCssState()`/`compileParsed()`. Esami iškvietimai veikia kaip anksčiau.

### 1.5.0

- `TailwindCompiler` poklasiai, kuriuose pakeičiama `generate()` arba `css()`, turi pridėti pasirenkamą parametrą `bool $minify = false`; PHP atmeta pakeistus metodus, kuriuose praleistas pasirenkamas tėvinės klasės parametras.
- Minifikuotą išvestį kuria serializatorius, todėl minifikuoti baitai šiek tiek skiriasi nuo 1.4.x (podėliai, kurių raktai paremti minifikuota išvestimi, vieną kartą taps negaliojantys).
- **Nauja:** `generateExact()` ir `cssExact()`, skirti kiekvieno puslapio CSS gauti iš vieno ilgai veikiančio kompiliatoriaus.
