
# Yhteensopivuus ja päivitys

Tälle sivulle on koottu tiedot, jotka on hyvä tietää ennen päivitystä tai tarkkaa tulostetta edellyttävää käyttöä: ajoaikavaatimukset, mitä TailwindCSS-julkaisua siirros seuraa, miten TailwindPHP eroaa tietoisesti TailwindCSS-alkuperäisversiosta sekä julkaisukohtaiset huomautukset. Koko historia on kohteessa [CHANGELOG.md](https://github.com/inline0/tailwindphp/blob/main/CHANGELOG.md).

## Vaatimukset

- **PHP 8.2 tai uudempi.** Testisarja toimii versioilla PHP 8.2, 8.3 ja 8.4.
- **`ctype`- ja `mbstring`-laajennukset.** Kääntäjä kutsuu toimintoja `ctype_*` ja `mb_chr()`. Molemmat toimitetaan useimpien PHP-koontien ja virallisten Docker-näköistiedostojen mukana, mutta `composer.json` ei vielä ilmoita niitä ([#11](https://github.com/inline0/tailwindphp/issues/11)), joten ilman niitä koonti asentaa paketin mutta epäonnistuu suorituksen aikana.
- **Valinnainen: `pcntl`** mahdollistaa sen, että CLI-toiminnon `--watch`-tila pysähtyy siististi tapahtumissa `SIGINT`/`SIGTERM`. Ilman sitä seurantatila toimii silti.

Node.js-laajennusta, FFI:tä tai natiivibinäärejä ei tarvita.

## Mitä TailwindCSS-julkaisua seurataan

Julkaisun 1.7.0 seuranta kattaa **TailwindCSS v4.3.3**. Upstream-repositorio on kiinnitetty `reference/tailwindcss`-hakemistoon git-alirepositoriona, sen testisarjat on poimittu tästä kiinnitetystä työkopiosta, ja 4,427-testit suoritetaan jokaisen pushin yhteydessä (katso [Suorituskyky ja testaus](https://tailwindphp.inline0.dev/fi/docs/advanced/performance)). Siirretyt lisäosat noudattavat `@tailwindcss/typography`- ja `@tailwindcss/forms`-kirjastojen käytäntöjä, ja luokkien apuohjelmat seuraavat clsx-, tailwind-merge- ja CVA-kirjastoja, jotka kaikki on kiinnitetty samalla tavalla.

## Tunnetut erot tuotteeseen TailwindCSS verrattuna

### Sarjallistuksen yksityiskohdat

Luotu CSS vastaa viitetestisarjoja. Muutamat sarjallistuksen yksityiskohdat eroavat siitä, mitä TailwindCSS CLI tuottaa, mutta ne eivät muuta kaskadia:

- Valmistajakohtaiset etuliitteet: jos viite tuottaa sekä kirjoitetun `-webkit-*`-rivin että luodun rivin, TailwindPHP tuottaa yhden rivin.
- Vanhempaa syntaksia käyttävät pseudoelementit (`::file-selector-button`, `::-webkit-datetime-edit-*`) pysyvät kirjoitetuissa valitsinluetteloissaan sen sijaan, että ne jaettaisiin omiksi säännöikseen.
- Kirjoitetut yksinkertaiset lainausmerkkijonot säilyvät yksinkertaisina lainausmerkkeinä (`'Segoe UI'`) sen sijaan, että ne muutettaisiin kaksoislainausmerkeiksi.
- Samanaikaisesti esiintyviä pitkämuotoisia ominaisuuksia ei yhdistetä lyhytmuotoiseksi ominaisuudeksi (Tailwind-tulosteessa siihen ei ole tarvetta).
- `.p-0` säilyttää `padding: 0px`-muodon, kun taas viite CLI tuottaa `padding: 0`-muodon, koska poimitussa testikorpuksessa käytetään `0px`-muotoa. Minimoija lyhentää sen muotoon `0`.

### Ei sisälly

TailwindPHP on CSS-kääntäjä. Siitä puuttuvat Tailwind-ekosysteemin editorityökalut (IntelliSense, automaattinen täydennys ja luokkien lajittelu) sekä lähdekartat, joten CLI-komennolla ei ole `--map`-valintaa.

### Sisällön skannaus

`tw::generate()` ja `TailwindCompiler::generate()` lukevat luokkanimet vain kohteiden `class` ja `className` attribuuteista. Jos luokkanimet ovat merkkijonoissa PHP tai JavaScript, käytä [`tw::extractCandidatesFromStrings()`](https://tailwindphp.inline0.dev/fi/docs/api#twextractcandidatesfromstrings) tai `@source inline("…")`. Kohteen `@source` polkumuodot ohitetaan kohteessa API, ja CLI huomioi ne vain osittain (katso alta).

### Nykyisen julkaisun tunnetut ongelmat

| Alue | Nykyinen toiminta | Ongelma |
|---|---|---|
| CLI `@source` | Polkuja ja yleismerkkejä ei käytetä, vaan skannataan syötetiedoston hakemisto. Lisäksi `@source not` ei sulje pois mitään. Katso [Mitä CLI skannaa](https://tailwindphp.inline0.dev/fi/docs/cli#what-the-cli-scans) | [#8](https://github.com/inline0/tailwindphp/issues/8) |
| CLI `--optimize` | Minimoi kuten `--minify` | [#9](https://github.com/inline0/tailwindphp/issues/9) |
| CLI-pitkät valinnat | `--input file.css` (välilyönneillä eroteltu) ohitetaan; käytä `--input=file.css`- tai `-i file.css`-muotoa | [#13](https://github.com/inline0/tailwindphp/issues/13) |
| Laajennusmuunnelmat | `addVariant()`/`matchVariant()`-muunnelmat ja typografian elementtimääritteet (`prose-headings:` …) kääntyvät ilman valitsintaan | [#10](https://github.com/inline0/tailwindphp/issues/10) |
| `@apply`-mixin-määritykset | `@apply --my-mixin;` poistetaan sen sijaan, että se välitettäisiin eteenpäin | [#12](https://github.com/inline0/tailwindphp/issues/12) |
| Viitetuonnit | Tuloste on tyhjä, kun viitetuonti on työkaluohjelmien tuontia ennen; `@import "tailwindcss" reference` ei vaikuta | [#14](https://github.com/inline0/tailwindphp/issues/14) |

## Päivityshuomiot

### 1.7.0

- **Tavukohtaisesti muuttuva tuloste** verrattuna versioon 1.6.x, vaikka se on toiminnallisesti vastaava kuin TailwindCSS v4.3.3-viite. Näkyviä muutoksia ovat muun muassa:
  - Välimatkakertoimet: `p-1` tuottaa `padding: var(--spacing)`-arvon `calc()`-arvon sijaan, ja kertoimella `0` saadaan pelkkä nollapituus.
  - Murtoluvut muunnetaan prosenteiksi: `w-1/2` tuottaa `width: 50%`.
  - Värit: `oklch()`/`oklab()`-vaaleus sarjallistetaan prosenttina (`oklch(62.3% .214 259.815)`), ja `white` ja `black` lyhenevät muotoihin `#fff` ja `#000`.
  - CSS2-pseudoelementit sarjallistetaan kaksoispisteen sijaan yhdellä kaksoispisteellä (`:before`, `:after`, `:first-letter`, `:first-line`).
  - Sisäkkäiset `@media`-, `@supports`- ja `@container`-säännöt litistetään paikoilleen lähdejärjestyksessä sen sijaan, että ne siirrettäisiin loppuun. Määritykset järjestetään uudelleen lightningcssin mukaisesti, ja peittyvät päällekkäiset määritykset poistetaan.
- **Tulosteeseen sidotut välimuistit tyhjenevät kerran.** Kohteen `tw::generate()` tiedostovälimuisti ei sisällytä avaimensa TailwindPHP-versiota, joten suorita päivityksen jälkeen `tw::clearCache()` (tai hakemisto, jonka välitit muodossa `cache`). [Kääntäjän tilavälimuisti](https://tailwindphp.inline0.dev/fi/docs/advanced/caching#compiler-state-cache) mitätöi itsensä.
- **Uutta:** `@variant` tekijän CSS-määrityksissä, CSS-mixin-määritykset kohteessa `@apply`, `@media reference` ja `@import "…" reference`, koko `--value()`/`--modifier()`-moottori toiminnallisille `@utility`-arvoille, tiukempi `@utility`-nimien tarkistus ja kohteen `tw::compile()` `polyfills`-valinta.

### 1.6.1

- **Uutta:** `container`-apuohjelma (`width: 100%` sekä yksi `max-width` kutakin taitekohtaa kohti).
- Yhdistetyt `--tw-*`-muuttujat (siirto, skaalaus, kierto, vinous, suodattimet ja muut) rekisteröidään nyt kohteessa `@property`, joten tyylitiedostoihin lisätään kyseiset `@property`-säännöt ja esimerkiksi `translate-x-7`-muunnokset toimivat selaimessa.

### 1.6.0

- **Uutta:** pysyvä kääntäjän tilavälimuisti (`stateCacheFile` kohteissa `tw::compile()` ja `TailwindCompiler`, `StateCache\compileCssCached()`) sekä jaetut `parseCssState()`-, `finalizeCssState()`- ja `compileParsed()`-funktiot. Olemassa olevat kutsut toimivat täsmälleen kuten ennen.

### 1.5.0

- Kohteen `TailwindCompiler` aliluokkien, jotka korvaavat `generate()`- tai `css()`-toiminnon, on lisättävä valinnainen `bool $minify = false`-parametri. PHP hylkää ohitukset, jotka jättävät pois yliluokan valinnaisen parametrin.
- Minimoitu tuloste tulee sarjallistajalta, joten tavut eroavat hieman tuotteesta 1.4.x (minimoituun tulosteeseen sidotut välimuistit tyhjenevät kerran).
- **Uutta:** `generateExact()` ja `cssExact()` mahdollistavat sivukohtaiset CSS-arvot yhdellä pitkään käytössä olevalla kääntäjällä.
