
# Ühilduvus ja versiooniuuendused

See leht koondab teabe, mida on vaja teada enne uuendamist või täpse väljundi eeldamist: käitusaja nõuded, millist TailwindCSS versiooni port järgib, mille poolest TailwindPHP erineb teadlikult versioonist TailwindCSS ning iga versiooni märkused. Täielik ajalugu on failis [CHANGELOG.md](https://github.com/inline0/tailwindphp/blob/main/CHANGELOG.md).

## Nõuded

- **PHP 8.2 või uuem.** Testikomplekt töötab versioonidega PHP 8.2, 8.3 ja 8.4.
- **Laiendused `ctype` ja `mbstring`.** Kompilaator kutsub funktsioone `ctype_*` ja `mb_chr()`. Mõlemad on kaasas enamiku PHP järkudega ja ametlike Docker tõmmistega, kuid `composer.json` ei deklareeri neid veel ([#11](https://github.com/inline0/tailwindphp/issues/11)), nii et ilma nendeta paigaldatakse pakett, kuid see ebaõnnestub käitusajal.
- **Valikuline: `pcntl`** võimaldab CLI `--watch`-režiimil `SIGINT`/`SIGTERM` korral korrektselt peatuda. Ilma selleta töötab jälgimisrežiim endiselt.

Node.js, FFI-t ega natiivseid binaarfaile ei kasutata.

## Millist TailwindCSS versiooni järgitakse

Versioon 1.7.0 järgib versiooni **TailwindCSS v4.3.3**. Ülesvooluhoidla on fikseeritud giti alamoodulina failis `reference/tailwindcss`, selle testikomplektid võetakse sellest fikseeritud väljavõttest ning 4,427 teste käitatakse iga tõukega (vt [Jõudlus ja testimine](https://tailwindphp.inline0.dev/et/docs/advanced/performance)). Porditud pluginad järgivad versioone `@tailwindcss/typography` ja `@tailwindcss/forms` ning klassiutiliidid clsx-i, tailwind-merge ja CVA-d; kõik on samal viisil fikseeritud.

## Teadaolevad erinevused versioonist TailwindCSS

### Serialiseerimise üksikasjad

Genereeritud CSS vastab viite testikomplektidele. Mõned serialiseerimise üksikasjad erinevad sellest, mida TailwindCSS CLI väljastab, kuid ükski neist ei muuda kaskaadi:

- Tootjaprefiksid: kui viide väljastab nii autori kirjutatud rea `-webkit-*` kui ka genereeritud rea, väljastab TailwindPHP ühe rea.
- Alandatud pseudoelementide (`::file-selector-button`, `::-webkit-datetime-edit-*`) algsed selektoriloendid säilivad, selle asemel et jagada need iga pseudoelemendi kohta eraldi reegliks.
- Autori kirjutatud ülakomadega stringid jäävad ülakomadega (`'Segoe UI'`), selle asemel et neid topeltjutumärkideks normaliseerida.
- Koos esinevaid pika vormi omadusi ei ühendata lühivormiks (Tailwind väljund ei vaja seda kunagi).
- `.p-0` säilitab `padding: 0px`, samas kui viide CLI väljastab `padding: 0`, sest väljavõetud testikorpus fikseerib kuju `0px`. Minimeerija lühendab selle kujule `0`.

### Pole kaasatud

TailwindPHP on CSS kompilaator. Sellest on välja jäetud Tailwind ökosüsteemi redaktoritööriistad (IntelliSense, automaattäitmine, klasside sortimine) ja lähtekaardid, seega puudub CLI-il valik `--map`.

### Sisu skannimine

`tw::generate()` ja `TailwindCompiler::generate()` loevad klassinimesid ainult atribuutidest `class` ja `className`. Stringides PHP või JavaScript olevate klassinimede puhul kasutage [`tw::extractCandidatesFromStrings()`](https://tailwindphp.inline0.dev/et/docs/api#twextractcandidatesfromstrings) või `@source inline("…")`. `@source` teevorme API eirab ja CLI arvestab nendega vaid osaliselt (vt allpool).

### Praeguse versiooni teadaolevad probleemid

| Valdkond | Praegune käitumine | Probleem |
|---|---|---|
| CLI `@source` | Teid ja globaalseid mustreid ei rakendata; selle asemel skannitakse sisendfaili kataloogi ning `@source not` ei jäta midagi välja. Vt [Mida CLI skannib](https://tailwindphp.inline0.dev/et/docs/cli#what-the-cli-scans) | [#8](https://github.com/inline0/tailwindphp/issues/8) |
| CLI `--optimize` | Minimeerib nagu `--minify` | [#9](https://github.com/inline0/tailwindphp/issues/9) |
| CLI pikad suvandid | `--input file.css` (tühikutega eraldatud) eiratakse; kasutage `--input=file.css` või `-i file.css` | [#13](https://github.com/inline0/tailwindphp/issues/13) |
| Plugina variandid | `addVariant()`/`matchVariant()` variandid ja tüpograafiaelemendi modifikaatorid (`prose-headings:` …) kompileeritakse ilma selektorita | [#10](https://github.com/inline0/tailwindphp/issues/10) |
| `@apply` miksinid | `@apply --my-mixin;` jäetakse edastamise asemel välja | [#12](https://github.com/inline0/tailwindphp/issues/12) |
| Viite impordid | Väljund on tühi, kui viite import eelneb utiliitide impordile; `@import "tailwindcss" reference` ei avalda mõju | [#14](https://github.com/inline0/tailwindphp/issues/14) |

## Uuendamise märkused

### 1.7.0

- **Baididena erinev väljund** võrreldes versiooniga 1.6.x, kuid funktsionaalselt võrdväärne viitega TailwindCSS v4.3.3. Nähtavad muudatused hõlmavad järgmist:
  - Vahekordajad: `p-1` väljastab `padding: var(--spacing)`, mitte `calc()`, ning kordaja `0` väljastab lihtsa nullpikkuse.
  - Murrud teisendatakse protsentideks: `w-1/2` väljastab `width: 50%`.
  - Värvid: `oklch()`/`oklab()` heledus serialiseeritakse protsendina (`oklch(62.3% .214 259.815)`), `white` ja `black` lühendatakse kujule `#fff` ja `#000`.
  - CSS2 pseudoelemendid serialiseeritakse ühe kooloniga (`:before`, `:after`, `:first-letter`, `:first-line`).
  - Pesastatud `@media`/`@supports`/`@container` reeglid tasandatakse oma kohas lähtekoodi järjekorras, selle asemel et tõsta lõppu; deklaratsioonid järjestatakse lightningcss-i reeglite järgi ja varjutatud kordusdeklaratsioonid eemaldatakse.
- **Väljundil põhinevad vahemälud tühjenevad korra.** `tw::generate()` failivahemälu võti ei sisalda versiooni TailwindPHP, seega käivitage pärast uuendamist `tw::clearCache()` (või kataloog, mille edastasite kui `cache`). [Kompilaatori oleku vahemälu](https://tailwindphp.inline0.dev/et/docs/advanced/caching#compiler-state-cache) kehtetuks muutmine toimub automaatselt.
- **Uus:** `@variant` autori CSS-is, CSS miksinid `@apply`-is, `@media reference` ja `@import "…" reference`, täielik `--value()`/`--modifier()` mootor funktsionaalse `@utility` jaoks, rangem `@utility` nimede valideerimine ning `tw::compile()` valik `polyfills`.

### 1.6.1

- **Uus:** utiliit `container` (`width: 100%` ja iga murdepunkti kohta üks `max-width`).
- Koos kasutatavad `--tw-*` muutujad (translate, scale, rotate, skew, filtrid ja muud) registreeritakse nüüd `@property`-iga, nii et laaditabelid saavad need `@property` reeglid ja teisendused, näiteks `translate-x-7`, rakenduvad brauseris.

### 1.6.0

- **Uus:** püsiv kompilaatori oleku vahemälu (`stateCacheFile` `tw::compile()`-is ja `TailwindCompiler`-is, `StateCache\compileCssCached()`) ning eraldi funktsioonid `parseCssState()`/`finalizeCssState()`/`compileParsed()`. Olemasolevad väljakutsed toimivad täpselt nagu varem.

### 1.5.0

- `TailwindCompiler` alamklassid, mis kirjutavad üle `generate()` või `css()`, peavad lisama valikulise parameetri `bool $minify = false`; PHP lükkab tagasi üledefinitsioonid, millest on vanema valikuline parameeter välja jäetud.
- Minimeeritud väljundi loob nüüd serialiseerija, seega erinevad minimeeritud baidid veidi versiooni 1.4.x omadest (minimeeritud väljundi järgi võtmega vahemälud tühjenevad korra).
- **Uus:** `generateExact()` ja `cssExact()` ühe pikaealise kompilaatori abil lehepõhise CSS jaoks.
