
# TailwindPHP

TailwindPHP on **ohjelman TailwindCSS 4.x 1:1-porttaus kielelle PHP**. Se jäsentää CSS-tiedostosi, etsii merkinnöistä luokkien nimet ja luo apuluokka-CSS-tyylit, jotka TailwindCSS v4.3.3 tuottaa — kokonaan PHP-kielellä, ilman Node.js-riippuvuutta tai build-vaihetta.

- **Pelkkää PHP-kieltä** — toimitetaan Composer-pakettina ja toimii PHP-versiossa 8.2 tai uudemmassa sekä tavallisilla `ctype`- ja `mbstring`-laajennuksilla. Ei `exec`-riippuvuutta, FFI:tä eikä natiivia build-työkaluketjua.
- **Testattu ohjelmaa TailwindCSS vasten** — apuluokat, variantit, direktiivit ja CSS-funktiot vastaavat ohjelman TailwindCSS v4.3.3-toimintaa. Tuloste tarkistetaan ohjelman Tailwind omia testijoukkoja vasten: ne on poimittu lähdekoodista TypeScript ja suoritetaan uudelleen jokaisessa pushissa (4,400+ testiä). Tunnetut erot (muutamat sarjoituksen yksityiskohdat, jotka eivät vaikuta kaskadiin, sekä avoimet ongelmat) on lueteltu [Yhteensopivuus ja päivitys](https://tailwindphp.inline0.dev/fi/docs/advanced/compatibility)-sivulla.
- **Koko ominaisuusvalikoima** — kaikki TailwindCSS v4.3.3-apuluokat (mukaan lukien `container`, vierityspalkkien apuluokat, `zoom-*` ja `tab-*`), kaikki variantit (hover, focus, responsiiviset tyylit, tumma tila, säiliökyselyt ja mielivaltaiset arvot) sekä kaikki direktiivit: `@import`, `@theme`, `@apply`, `@utility`, `@variant`, `@custom-variant`, `@layer`, `@plugin` ja `@source`.
- **Kaikki tarvittava mukana** — `cn()`, `merge()`, `join()` ja `variants()` sisältävät PHP-porttaukset clsxistä, tailwind-merge-kirjaston ja CVA:n, joten kaikki Tailwind-projektissa tarvittavat lisäkirjastot ovat jo valmiina.
- **Liitännäiset** — `@tailwindcss/typography` ja `@tailwindcss/forms` on portattu kokonaan, ja PHP-liitännäinen API tarjoaa mahdollisuuden luoda omia liitännäisiä.

## Miksi TailwindPHP on olemassa

TailwindCSS on kirjoitettu kielellä TypeScript ja toimii alustalla Node.js. Tämä on ehdoton vaatimus mille tahansa PHP-projektille, joka haluaa käyttää Tailwind-toimintoa: tarvitaan toinen ajonaikainen ympäristö, npm-asennus ja build-vaihe CI:ssä ja Docker-ympäristöissä. Monissa PHP-sovelluksissa se on ylimääräistä vaivaa, jota ei haluta ottaa.

TailwindPHP poistaa tämän tarpeen. Koodisi PHP kääntää Tailwind CSS suoraan käyttäen vain vakiokirjastoa. Se mahdollistaa asioita, jotka ovat JavaScript-työkaluketjulla hankalia tai mahdottomia:

- **WordPress- ja PHP-sovelluskehykset** — toimita Tailwind-pohjaisia teemoja ja liitännäisiä vaatimatta käyttäjiä asentamaan Node.js-ohjelmaa tai suorittamaan buildia. Suorita vain `composer require`, niin olet valmis. Katso [TailwindWP](https://github.com/dnnsjsk/tailwindwp), esimerkki-WordPress-liitännäinen, joka luo lohkoeditorin CSS-tyylejä ohjelmalla TailwindPHP.
- **Ajonaikainen CSS-tyylien luonti** — luo apuluokka-CSS-tyylejä lennossa käyttäjän syötteestä, tietokannan sisällöstä tai mallimuuttujista build-vaiheen sijaan.
- **Yksinkertaisempi käyttöönotto** — tuotantoympäristöön ei tarvita Node.js-ohjelmaa, CI:hin build-vaihetta eikä npm-asennusta Docker-kuvaan.

Sama idea, jonka [scssphp](https://github.com/scssphp/scssphp) toi kielelle SCSS — koko kääntäjä PHP-kielellä.

## Mitä se tekee

- Kääntää TailwindCSS v4.3.3 -apuohjelmakokonaisuuden, variantit ja mielivaltaiset arvot sisällöstä löytyvien luokkanimien perusteella.
- Ratkaisee kaikki direktiivit: `@import` (mukaan lukien virtuaalimoduulit, kuten `tailwindcss` ja `tailwindcss/utilities`, sekä `reference`-tuonnit), `@theme`, `@apply`, `@utility`, `@variant`, `@custom-variant`, `@layer`, `@plugin` ja `@source`.
- Toteuttaa Tailwindn CSS-funktiot — `theme()`, `--theme()`, `--spacing()` ja `--alpha()` — sekä muunnoksen `color-mix()` → `oklab()` ja CSS-muunnokset, jotka TailwindCSS delegoi LightningCSSlle.
- Ratkaisee `@import`n tiedostojärjestelmästä sisäkkäisine tuonteineen, kaksoiskappaleiden poistamisineen ja mukautettuine ratkaisijoineen tai upotetuista CSS-merkkijonoista.
- Sisältää Preflightin (Tailwindn perusnollauksen), etuliitetuen, `@property`-varatoteutukset, toimittajakohtaiset etuliitteet ja avainruutujen nostamisen.
- Sisältää `cn()`n, `merge()`n, `join()`n ja `variants()`/`compose()`n luokkanimien muodostamiseen, ristiriitojen ratkaisuun ja komponenttivariantteihin.
- Sisältää typografia- ja lomakelaajennukset sekä mukautettujen laajennusten API-rajapinnan (`addUtilities`, `matchUtilities`, `addComponents`, `addVariant`, `theme`, …).
- Tarjoaa CLIn (`bin/tailwindphp`) ja `@tailwindcss/cli`n koontiasetukset sekä tiedostopohjaisen tulosteen välimuistin, pysyvän kääntäjän tilavälimuistin ja tuotantoon tarkoitetun CSS-minimoijan.

## Mitä se ei ole

TailwindPHP on CSS-kääntäjä, ei editorityökaluketju. Siitä on tarkoituksella jätetty pois Tailwind-ekosysteemin IDE-ominaisuudet — IntelliSense, automaattinen täydennys, luokkien lajittelu ja lähdekartat — sillä ne ovat editorin ominaisuuksia eivätkä osa CSSn tuottamista. Kaikki CSSn tuottamiseen liittyvä kuuluu tähän; editorisi toimintaan liittyvä ei.

## Mistä aloittaa

- [Aloitus](https://tailwindphp.inline0.dev/fi/docs/getting-started) — asenna paketti ja luo ensimmäinen tyylitiedostosi.
- [Käyttö](https://tailwindphp.inline0.dev/fi/docs/usage) — skannaa sisältöä, mukauta teemaa ja käytä Tailwindn direktiivejä.
- [Luokkien apuohjelmat](https://tailwindphp.inline0.dev/fi/docs/class-utilities) — `cn()`, `merge()`, `join()` ja `variants()`.
- [Laajennukset](https://tailwindphp.inline0.dev/fi/docs/plugins) — typografia, lomakkeet ja omien laajennusten kirjoittaminen.
- [API](https://tailwindphp.inline0.dev/fi/docs/api) — kaikki `tw`-direktiivit ja `TailwindCompiler`-instanssi.
- [CLI](https://tailwindphp.inline0.dev/fi/docs/cli) — `bin/tailwindphp` tiedostopohjaisiin koonteihin ja tarkkailutilaan.
- [Lisäasetukset](https://tailwindphp.inline0.dev/fi/docs/advanced) — arkkitehtuuri, välimuisti, suorituskyky ja yhteensopivuushuomiot.
