
# Saderība un jaunināšana

Šajā lapā apkopots, kas jāzina pirms jaunināšanas vai paļaušanās uz precīzu izvadi: izpildvides prasības, TailwindCSS laidieni, kuriem ports seko, vietas, kur TailwindPHP apzināti atšķiras no TailwindCSS, un piezīmes par katru laidienu. Pilna vēsture pieejama [CHANGELOG.md](https://github.com/inline0/tailwindphp/blob/main/CHANGELOG.md).

## Prasības

- **PHP 8.2 vai jaunāka versija.** Testu kopa darbojas ar PHP 8.2, 8.3 un 8.4.
- **Paplašinājumi `ctype` un `mbstring`.** Kompilators izsauc `ctype_*` un `mb_chr()`. Tie ir iekļauti lielākajā daļā PHP būvējumu un oficiālajos Docker attēlos, taču `composer.json` tos vēl nedeklarē ([#11](https://github.com/inline0/tailwindphp/issues/11)), tāpēc būvējums bez tiem instalē pakotni, bet izpildlaikā kļūdās.
- **Neobligāti: `pcntl`** ļauj CLI `--watch` režīmam korekti apstāties, saņemot `SIGINT`/`SIGTERM`. Bez tā novērošanas režīms joprojām darbojas.

Netiek izmantots Node.js, FFI vai vietējie binārie faili.

## Kuram TailwindCSS laidienam tiek sekots

Laidienā 1.7.0 tiek izsekots TailwindCSS v4.3.3. Augšupējā repozitorija versija ir fiksēta kā git apakšmodulis ceļā `reference/tailwindcss`, tā testu komplekti tiek iegūti no šīs fiksētās kopijas, un 4,427 testi tiek palaisti pēc katras augšupielādes (skatiet [Veiktspēja un testēšana](https://tailwindphp.inline0.dev/lv/docs/advanced/performance)). Pārnestie spraudņi atbilst `@tailwindcss/typography` un `@tailwindcss/forms`, bet klašu utilītas — clsx, tailwind-merge un CVA; katra no tām ir fiksēta tādā pašā veidā.

## Zināmās atšķirības no TailwindCSS

### Serializācijas detaļas

Ģenerētais CSS atbilst atsauces testu komplektiem. Dažas serializācijas detaļas atšķiras no tā, ko izvada TailwindCSS CLI, taču neviena no tām nemaina kaskādi:

- Piegādātāju prefiksi: ja atsauce izvada gan autora `-webkit-*` rindu, gan ģenerētu rindu, TailwindPHP izvada vienu rindu.
- Pārveidotie pseid elementi (`::file-selector-button`, `::-webkit-datetime-edit-*`) paliek autora selektoru sarakstos, nevis tiek sadalīti atsevišķos noteikumos katram pseid elementam.
- Autora virknes ar vienpēdiņām saglabā vienpēdiņas (`'Segoe UI'`), nevis tiek pārveidotas par virknēm ar dubultpēdiņām.
- Vienlaikus sastopamie garie rekvizīti netiek apvienoti saīsinātā pierakstā (Tailwind paša izvadei tas nekad nav nepieciešams).
- `.p-0` saglabā `padding: 0px`, kur atsauce CLI izvada `padding: 0`, jo izvilktā testu kopa fiksē formu `0px`. Minifikators to saīsina līdz `0`.

### Nav iekļauts

TailwindPHP ir CSS kompilators. Tajā nav iekļauti Tailwind ekosistēmas redaktora rīki (IntelliSense, automātiskā pabeigšana, klašu kārtošana) un avota kartes, tāpēc CLI nav `--map` opcijas.

### Satura skenēšana

`tw::generate()` un `TailwindCompiler::generate()` nolasa klašu nosaukumus tikai no `class` un `className` atribūtiem. Klašu nosaukumiem, kas atrodas PHP vai JavaScript virknēs, izmantojiet [`tw::extractCandidatesFromStrings()`](https://tailwindphp.inline0.dev/lv/docs/api#twextractcandidatesfromstrings) vai `@source inline("…")`. `@source` ceļu formas API ignorē, bet CLI ņem vērā tikai daļēji (skatiet tālāk).

### Zināmās pašreizējā laidiena problēmas

| Joma | Pašreizējā darbība | Problēma |
|---|---|---|
| CLI `@source` | Ceļi un glob izteiksmes netiek lietoti; tā vietā tiek skenēta ievades faila mape, un `@source not` neko neizslēdz. Skatiet [Ko skenē CLI](https://tailwindphp.inline0.dev/lv/docs/cli#what-the-cli-scans) | [#8](https://github.com/inline0/tailwindphp/issues/8) |
| CLI `--optimize` | Minificē, tāpat kā `--minify` | [#9](https://github.com/inline0/tailwindphp/issues/9) |
| CLI garās opcijas | `--input file.css` (atdalīts ar atstarpēm) tiek ignorēts; izmantojiet `--input=file.css` vai `-i file.css` | [#13](https://github.com/inline0/tailwindphp/issues/13) |
| Spraudņu varianti | `addVariant()`/`matchVariant()` varianti un tipogrāfijas elementu modifikatori (`prose-headings:` …) tiek kompilēti bez sava selektora | [#10](https://github.com/inline0/tailwindphp/issues/10) |
| `@apply` maisījumi | `@apply --my-mixin;` tiek atmests, nevis nodots tālāk | [#12](https://github.com/inline0/tailwindphp/issues/12) |
| Atsauces imports | Izvade ir tukša, ja atsauces imports ir pirms utilītu importa; `@import "tailwindcss" reference` neietekmē rezultātu | [#14](https://github.com/inline0/tailwindphp/issues/14) |

## Jaunināšanas piezīmes

### 1.7.0

- **Izvade mainās pa baitiem**, salīdzinot ar 1.6.x, vienlaikus funkcionāli paliekot līdzvērtīga TailwindCSS v4.3.3 atsaucei. Starp redzamajām izmaiņām:
  - Atstarpju reizinātāji: `p-1` izvada `padding: var(--spacing)`, nevis `calc()`, bet reizinātājs `0` izvada vienkāršu nulles garumu.
  - Daļskaitļi tiek pārveidoti procentos: `w-1/2` izvada `width: 50%`.
  - Krāsas: `oklch()`/`oklab()` gaišums tiek serializēts procentos (`oklch(62.3% .214 259.815)`), `white` un `black` tiek saīsināti līdz `#fff` un `#000`.
  - CSS2 pseidoelementi tiek serializēti ar vienu kolu (`:before`, `:after`, `:first-letter`, `:first-line`).
  - Ligzdotie `@media`/`@supports`/`@container` noteikumi tiek saplacināti to sākotnējā vietā un avota secībā, nevis pārvietoti uz beigām; deklarācijas tiek pārkārtotas tā, kā tās kārto lightningcss; aizēnotās deklarāciju dublikāti tiek noņemti.
- **Kešatmiņas, kuru atslēga ir izvade, vienreiz jāatjauno.** Failu kešatmiņas atslēgā `tw::generate()` nav iekļauta TailwindPHP versija, tāpēc pēc jaunināšanas palaidiet `tw::clearCache()` (vai mapi, ko norādījāt kā `cache`). [kompilatora stāvokļa kešatmiņa](https://tailwindphp.inline0.dev/lv/docs/advanced/caching#compiler-state-cache) pati sevi invalidē.
- **Jauns:** `@variant` autora CSS, CSS maisījumi `@apply`, `@media reference` un `@import "…" reference`, pilns `--value()`/`--modifier()` dzinējs funkcionāliem `@utility`, stingrāka `@utility` nosaukumu validācija un `tw::compile()` opcija `polyfills`.

### 1.6.1

- **Jauns:** utilīta `container` (`width: 100%` plus viens `max-width` katram pārtraukumpunktam).
- Kombinētie `--tw-*` mainīgie (pārvietošana, mērogošana, pagriešana, sašķiebšana, filtri un citi) tagad ir reģistrēti `@property`, tāpēc stilu lapās ir pieejami šie `@property` noteikumi, un tādas transformācijas kā `translate-x-7` darbojas pārlūkā.

### 1.6.0

- **Jauns:** pastāvīgā kompilatora stāvokļa kešatmiņa (`stateCacheFile` `tw::compile()` un `TailwindCompiler`, `StateCache\compileCssCached()`), kā arī sadalītās funkcijas `parseCssState()`/`finalizeCssState()`/`compileParsed()`. Esošie izsaukumi darbojas tieši tāpat kā iepriekš.

### 1.5.0

- `TailwindCompiler` apakšklasēm, kas pārraksta `generate()` vai `css()`, jāpievieno neobligātais parametrs `bool $minify = false`; PHP noraida pārrakstīšanas, kurās nav iekļauts vecākklases neobligātais parametrs.
- Minificēto izvadi veido serializētājs, tāpēc minificētie baiti nedaudz atšķiras no 1.4.x (kešatmiņas, kuru atslēga ir minificētā izvade, vienreiz jāatjauno).
- **Jauns:** `generateExact()` un `cssExact()` katras lapas CSS iegūšanai no viena ilgdzīvojoša kompilatora.
