
# Kompatibilitet & uppgradering

Den här sidan samlar det du behöver veta innan du uppgraderar eller förlitar dig på exakt utdata: körningskraven, vilken TailwindCSS-version portningen följer, på vilka sätt TailwindPHP medvetet skiljer sig från TailwindCSS och anteckningarna för varje version. Hela historiken finns i [CHANGELOG.md](https://github.com/inline0/tailwindphp/blob/main/CHANGELOG.md).

## Krav

- **PHP 8.2 eller senare.** Testsviten körs på PHP 8.2, 8.3 och 8.4.
- **Tilläggen `ctype` och `mbstring`.** Kompilatorn anropar `ctype_*` och `mb_chr()`. Båda ingår i de flesta PHP-byggen och i de officiella Docker-avbildningarna, men `composer.json` deklarerar dem ännu inte ([#11](https://github.com/inline0/tailwindphp/issues/11)), så ett bygge utan dem installerar paketet men misslyckas vid körning.
- **Valfritt: `pcntl`** låter CLI:s läge `--watch` avslutas korrekt vid `SIGINT`/`SIGTERM`. Utan det fungerar bevakningsläget fortfarande.

Ingen Node.js, ingen FFI och inga inbyggda binärfiler är inblandade.

## Vilken TailwindCSS-version som följs

Version 1.7.0 följer **TailwindCSS v4.3.3**. Uppströmsarkivet är låst som en git-undermodul i `reference/tailwindcss`, dess testsviter hämtas från den låsta utcheckningen och 4,427-testerna körs vid varje push (se [Prestanda och testning](https://tailwindphp.inline0.dev/sv/docs/advanced/performance)). De porterade plugin-programmen följer `@tailwindcss/typography` och `@tailwindcss/forms`, och klassverktygen följer clsx, tailwind-merge och CVA, alla låsta på samma sätt.

## Kända skillnader från TailwindCSS

### Serialiseringsdetaljer

Genererad CSS matchar referenstestsviterna. Några serialiseringsdetaljer skiljer sig från det som TailwindCSS CLI skriver ut, men ingen av skillnaderna påverkar kaskaden:

- Leverantörsprefix: när referensen skriver ut både den författade `-webkit-*`-raden och en genererad rad skriver TailwindPHP ut en enda rad.
- Nedgraderade pseudo-element (`::file-selector-button`, `::-webkit-datetime-edit-*`) ligger kvar i sina författade selektorlistor i stället för att delas upp i en regel per pseudo-element.
- Författade strängar med enkla citattecken förblir inom enkla citattecken (`'Segoe UI'`) i stället för att normaliseras till dubbla citattecken.
- Samverkande longhand-egenskaper kombineras inte till en kortform (Tailwinds egen utdata behöver det aldrig).
- `.p-0` behåller `padding: 0px` där referensen CLI skriver ut `padding: 0`, eftersom den extraherade testkorpusen låser `0px`-formen. Minifieraren förkortar den till `0`.

### Ingår inte

TailwindPHP är en CSS-kompilator. Den saknar redigeringsverktygen i Tailwind-ekosystemet (IntelliSense, automatisk komplettering, klassortering) och källkartor, så CLI har inget `--map`-alternativ.

### Innehållsskanning

`tw::generate()` och `TailwindCompiler::generate()` läser klassnamn endast från attributen `class` och `className`. För klassnamn som finns i strängar i PHP eller JavaScript använder du [`tw::extractCandidatesFromStrings()`](https://tailwindphp.inline0.dev/sv/docs/api#twextractcandidatesfromstrings) eller `@source inline("…")`. Sökvägsformer av `@source` ignoreras av API och hanteras bara delvis av CLI (se nedan).

### Kända problem i den aktuella versionen

| Område | Beteende i dag | Problem |
|---|---|---|
| CLI `@source` | Sökvägar och globbmönster tillämpas inte; i stället genomsöks indatans katalog, och `@source not` utesluter ingenting. Se [Vad CLI genomsöker](https://tailwindphp.inline0.dev/sv/docs/cli#what-the-cli-scans) | [#8](https://github.com/inline0/tailwindphp/issues/8) |
| CLI `--optimize` | Minifierar, liksom `--minify` | [#9](https://github.com/inline0/tailwindphp/issues/9) |
| CLI långa alternativ | `--input file.css` (separerat med blanksteg) ignoreras; använd `--input=file.css` eller `-i file.css` | [#13](https://github.com/inline0/tailwindphp/issues/13) |
| Pluginvarianter | Varianterna `addVariant()`/`matchVariant()` och typografielementets modifierare (`prose-headings:` …) kompileras utan sin selektor | [#10](https://github.com/inline0/tailwindphp/issues/10) |
| `@apply`-mixins | `@apply --my-mixin;` tas bort i stället för att skickas vidare | [#12](https://github.com/inline0/tailwindphp/issues/12) |
| Referensimporter | Utdata är tom när en referensimport står före importen av verktygen; `@import "tailwindcss" reference` har ingen effekt | [#14](https://github.com/inline0/tailwindphp/issues/14) |

## Uppgraderingsanteckningar

### 1.7.0

- **Utdata ändras byte för byte** jämfört med 1.6.x, men är funktionellt likvärdig med referensen TailwindCSS v4.3.3. Några synliga ändringar:
  - Avståndsmultiplikatorer: `p-1` skriver ut `padding: var(--spacing)` i stället för en `calc()`, och multiplikatorn `0` skriver ut en vanlig nolllängd.
  - Bråk omvandlas till procent: `w-1/2` skriver ut `width: 50%`.
  - Färger: ljusheten i `oklch()`/`oklab()` serialiseras som procent (`oklch(62.3% .214 259.815)`), `white` och `black` förkortas till `#fff` och `#000`.
  - CSS2-pseudo-element serialiseras med ett kolon (`:before`, `:after`, `:first-letter`, `:first-line`).
  - Kapslade `@media`/`@supports`/`@container`-regler plattas ut på plats i källordning i stället för att flyttas sist; deklarationer ordnas om enligt lightningcss ordning, och överskuggade dubblettdeklarationer tas bort.
- **Cachar med utdata som nyckel måste byggas om en gång.** Filcachen i `tw::generate()` inkluderar inte TailwindPHP-versionen i sin nyckel, så kör `tw::clearCache()` (eller katalogen du skickade som `cache`) efter uppgradering. Cachen för [kompilatorns tillstånd](https://tailwindphp.inline0.dev/sv/docs/advanced/caching#compiler-state-cache) ogiltigförklarar sig själv.
- **Nytt:** `@variant` i författarens CSS, CSS-mixins i `@apply`, `@media reference` och `@import "…" reference`, den fullständiga motorn för `--value()`/`--modifier()` för funktionella `@utility`, striktare validering av `@utility`-namn och alternativet `polyfills` för `tw::compile()`.

### 1.6.1

- **Nytt:** verktyget `container` (`width: 100%` plus en `max-width` per brytpunkt).
- Sammansatta `--tw-*`-variabler (translate, scale, rotate, skew, filter och andra) registreras nu med `@property`, så formatmallar får de reglerna för `@property` och transformeringar som `translate-x-7` börjar gälla i webbläsaren.

### 1.6.0

- **Nytt:** den beständiga cachen för kompilatortillstånd (`stateCacheFile` på `tw::compile()` och `TailwindCompiler`, `StateCache\compileCssCached()`) samt de uppdelade funktionerna `parseCssState()`/`finalizeCssState()`/`compileParsed()`. Befintliga anrop fungerar precis som tidigare.

### 1.5.0

- Underklasser av `TailwindCompiler` som åsidosätter `generate()` eller `css()` måste lägga till den valfria parametern `bool $minify = false`; PHP avvisar åsidosättningar där en föräldraklass valfri parameter saknas.
- Minifierad utdata kommer från serialiseraren, så minifierade byte skiljer sig en aning från 1.4.x (cachar med minifierad utdata som nyckel måste byggas om en gång).
- **Nytt:** `generateExact()` och `cssExact()` för CSS per sida från en långlivad kompilator.
