
# Združljivost in nadgradnja

Na tej strani so zbrane informacije, ki jih potrebujete pred nadgradnjo ali če se zanašate na natančen izhod: zahteve izvajalnega okolja, kateri izdaji TailwindCSS sledi prenesena različica, kje se TailwindPHP namenoma razlikuje od TailwindCSS ter opombe za posamezne izdaje. Celotna zgodovina je v [CHANGELOG.md](https://github.com/inline0/tailwindphp/blob/main/CHANGELOG.md).

## Zahteve

- **PHP 8.2 ali novejši.** Zbirka testov se izvaja v PHP 8.2, 8.3 in 8.4.
- **Razširitvi `ctype` in `mbstring`.** Prevajalnik kliče `ctype_*` in `mb_chr()`. Priloženi sta večini gradenj PHP in uradnim slikam Docker, vendar ju `composer.json` še ne deklarira ([#11](https://github.com/inline0/tailwindphp/issues/11)), zato se paket brez njiju namesti, a pri izvajanju odpove.
- **Izbirno: `pcntl`** omogoča, da se način `--watch` v CLI čisto ustavi ob `SIGINT`/`SIGTERM`. Način spremljanja deluje tudi brez tega.

Ne uporabljajo se Node.js, FFI ali izvorne dvojiške datoteke.

## Kateri izdaji TailwindCSS sledi različica

Izdaja 1.7.0 sledi **TailwindCSS v4.3.3**. Izvorno skladišče je pripeto kot podmodul git v `reference/tailwindcss`, njegove zbirke testov so izluščene iz te pripete kopije, testi 4,427 pa se izvedejo ob vsakem potisku (glejte [Testiranje zmogljivosti in delovanja](https://tailwindphp.inline0.dev/sl/docs/advanced/performance)). Preneseni vtičniki sledijo `@tailwindcss/typography` in `@tailwindcss/forms`, pripomočki razredov pa sledijo clsx, tailwind-merge in CVA; vsi so pripeti na enak način.

## Znane razlike od TailwindCSS

### Podrobnosti serializacije

Ustvarjeni CSS se ujema z referenčnimi zbirkami testov. Nekaj podrobnosti serializacije se razlikuje od izhoda, ki ga prikaže TailwindCSS CLI, vendar nobena od teh razlik ne spremeni kaskade:

- Predpone ponudnikov: kadar referenca izpiše tako zapisano vrstico `-webkit-*` kot ustvarjeno, TailwindPHP izpiše eno vrstico.
- Psevdoprvine znižane ravni (`::file-selector-button`, `::-webkit-datetime-edit-*`) ostanejo na svojih zapisanih seznamih izbirnikov, namesto da bi bile razdeljene na po eno pravilo za vsako psevdoprvinо.
- Nizi, zapisani z enojnimi narekovaji, ostanejo zapisani tako (`'Segoe UI'`), namesto da bi bili pretvorjeni v dvojne narekovaje.
- Sočasno prisotne dolge oblike lastnosti se ne združijo v skrajšano obliko (lastni izhod Tailwind tega nikoli ne potrebuje).
- `.p-0` ohrani `padding: 0px`, medtem ko referenčni CLI izpiše `padding: 0`, ker izluščena zbirka testov določa obliko `0px`. Minifikator jo skrajša v `0`.

### Ni vključeno

TailwindPHP je prevajalnik CSS. Ne vključuje orodij za urejanje v ekosistemu Tailwind (IntelliSense, samodokončanje, razvrščanje razredov) ali izvornih zemljevidov, zato CLI nima možnosti `--map`.

### Pregledovanje vsebine

`tw::generate()` in `TailwindCompiler::generate()` bereta imena razredov samo iz atributov `class` in `className`. Za imena razredov v nizih PHP ali JavaScript uporabite [`tw::extractCandidatesFromStrings()`](https://tailwindphp.inline0.dev/sl/docs/api#twextractcandidatesfromstrings) ali `@source inline("…")`. Oblike poti za `@source` prezre API, CLI pa jih upošteva le delno (glejte spodaj).

### Znane težave v trenutni izdaji

| Področje | Trenutno delovanje | Težava |
|---|---|---|
| CLI `@source` | Poti in vzorci glob se ne uporabijo; namesto tega se preišče imenik vhodne datoteke, `@source not` pa ničesar ne izključi. Glejte [Kaj preišče CLI](https://tailwindphp.inline0.dev/sl/docs/cli#what-the-cli-scans) | [#8](https://github.com/inline0/tailwindphp/issues/8) |
| CLI `--optimize` | Minificira, tako kot `--minify` | [#9](https://github.com/inline0/tailwindphp/issues/9) |
| Dolge možnosti CLI | `--input file.css` (ločeno s presledki) se prezre; uporabite `--input=file.css` ali `-i file.css` | [#13](https://github.com/inline0/tailwindphp/issues/13) |
| Različice vtičnikov | Različice `addVariant()`/`matchVariant()` in modifikatorji elementov tipografije (`prose-headings:` …) se prevedejo brez svojega izbirnika | [#10](https://github.com/inline0/tailwindphp/issues/10) |
| Mešanice `@apply` | `@apply --my-mixin;` se zavrže namesto posredovanja naprej | [#12](https://github.com/inline0/tailwindphp/issues/12) |
| Referenčni uvozi | Izhod je prazen, kadar je referenčni uvoz pred uvozom pripomočkov; `@import "tailwindcss" reference` ne učinkuje | [#14](https://github.com/inline0/tailwindphp/issues/14) |

## Opombe ob nadgradnji

### 1.7.0

- **Izhod se spremeni na ravni bajtov** v primerjavi z 1.6.x, vendar ostaja funkcionalno enakovreden referenci TailwindCSS v4.3.3. Med vidnimi spremembami so:
  - Množilniki razmikov: `p-1` izpiše `padding: var(--spacing)` namesto `calc()`, množilnik `0` pa izpiše navadno dolžino nič.
  - Ulomki se pretvorijo v odstotke: `w-1/2` izpiše `width: 50%`.
  - Barve: svetlost `oklch()`/`oklab()` se serializira kot odstotek (`oklch(62.3% .214 259.815)`), `white` in `black` pa se skrajšata v `#fff` in `#000`.
  - Psevdoprvine CSS2 se serializirajo z enim dvopičjem (`:before`, `:after`, `:first-letter`, `:first-line`).
  - Ugnezdena pravila `@media`/`@supports`/`@container` se sploščijo na mestu in v vrstnem redu izvorne kode, namesto da bi bila prestavljena na konec; deklaracije se prerazporedijo po vrstnem redu lightningcss; zasenčene podvojene deklaracije se odstranijo.
- **Predpomnilniki, vezani na izhod, se enkrat izpraznijo.** Datotečni predpomnilnik `tw::generate()` v ključ ne vključuje različice TailwindPHP, zato po nadgradnji zaženite `tw::clearCache()` (ali imenik, ki ste ga podali kot `cache`). Predpomnilnik stanja prevajalnika [ se samodejno razveljavi](https://tailwindphp.inline0.dev/sl/docs/advanced/caching#compiler-state-cache).
- **Novo:** `@variant` v avtorskem CSS, mešanice CSS v `@apply`, `@media reference` in `@import "…" reference`, celotni mehanizem `--value()`/`--modifier()` za funkcionalni `@utility`, strožje preverjanje imen `@utility` ter možnost `tw::compile()` za `polyfills`.

### 1.6.1

- **Novo:** pripomoček `container` (`width: 100%` in en `max-width` za vsako prelomno točko).
- Sestavljene spremenljivke `--tw-*` (translate, scale, rotate, skew, filtri in druge) so zdaj registrirane pri `@property`, zato slogovne predloge pridobijo ta pravila `@property`, transformacije, kot je `translate-x-7`, pa začnejo delovati v brskalniku.

### 1.6.0

- **Novo:** trajni predpomnilnik stanja prevajalnika (`stateCacheFile` v `tw::compile()` in `TailwindCompiler`, `StateCache\compileCssCached()`) ter ločene funkcije `parseCssState()`/`finalizeCssState()`/`compileParsed()`. Obstoječi klici se vedejo povsem enako kot prej.

### 1.5.0

- Podrazredi `TailwindCompiler`, ki preglasijo `generate()` ali `css()`, morajo dodati izbirni parameter `bool $minify = false`; PHP zavrne preglasitve, ki izpustijo izbirni parameter nadrejenega razreda.
- Minificirani izhod ustvari serializator, zato se minificirani bajti nekoliko razlikujejo od 1.4.x (predpomnilniki, vezani na minificirani izhod, se enkrat izpraznijo).
- **Novo:** `generateExact()` in `cssExact()` za CSS posameznih strani z enim dolgoživečim prevajalnikom.
