
# Συμβατότητα & αναβαθμίσεις

Αυτή η σελίδα συγκεντρώνει όσα χρειάζεται να γνωρίζετε πριν από αναβάθμιση ή πριν βασιστείτε σε ακριβή έξοδο: τις απαιτήσεις εκτέλεσης, ποια έκδοση TailwindCSS ακολουθεί η μεταφορά, πού το TailwindPHP διαφέρει σκόπιμα από το TailwindCSS και τις σημειώσεις για κάθε έκδοση. Το πλήρες ιστορικό βρίσκεται στο [CHANGELOG.md](https://github.com/inline0/tailwindphp/blob/main/CHANGELOG.md).

## Απαιτήσεις

- **PHP 8.2 ή νεότερο.** Η σουίτα δοκιμών εκτελείται στις εκδόσεις PHP 8.2, 8.3 και 8.4.
- **Οι επεκτάσεις `ctype` και `mbstring`.** Ο μεταγλωττιστής καλεί τα `ctype_*` και `mb_chr()`. Και τα δύο περιλαμβάνονται στις περισσότερες εκδόσεις PHP και στις επίσημες εικόνες Docker, αλλά το `composer.json` δεν τα δηλώνει ακόμη ([#11](https://github.com/inline0/tailwindphp/issues/11)), οπότε μια εγκατάσταση χωρίς αυτά ολοκληρώνεται αλλά αποτυγχάνει κατά την εκτέλεση.
- **Προαιρετικό: `pcntl`** επιτρέπει στη λειτουργία `--watch` του CLI να τερματίζει ομαλά με `SIGINT`/`SIGTERM`. Χωρίς αυτό, η λειτουργία παρακολούθησης εξακολουθεί να λειτουργεί.

Δεν χρησιμοποιούνται Node.js, FFI ή εγγενή δυαδικά αρχεία.

## Ποια έκδοση TailwindCSS ακολουθείται

Η έκδοση 1.7.0 ακολουθεί τα **TailwindCSS v4.3.3**. Το αποθετήριο upstream είναι συνδεδεμένο ως υπομονάδα git στο `reference/tailwindcss`, οι σουίτες δοκιμών του εξάγονται από αυτό το σταθερά επιλεγμένο checkout και οι δοκιμές 4,427 εκτελούνται σε κάθε push (δείτε [Απόδοση & δοκιμές](https://tailwindphp.inline0.dev/el/docs/advanced/performance)). Τα μεταφερμένα πρόσθετα ακολουθούν τα `@tailwindcss/typography` και `@tailwindcss/forms`, ενώ τα βοηθητικά στοιχεία κλάσεων ακολουθούν τα clsx, tailwind-merge και CVA, καθένα με τον ίδιο τρόπο σταθερά επιλεγμένο.

## Γνωστές διαφορές από το TailwindCSS

### Λεπτομέρειες σειριοποίησης

Το παραγόμενο CSS συμφωνεί με τις σουίτες δοκιμών αναφοράς. Μερικές λεπτομέρειες σειριοποίησης διαφέρουν από ό,τι εμφανίζει το TailwindCSS CLI, χωρίς να αλλάζουν την αλληλουχία εφαρμογής:

- Προθέματα προμηθευτών: όταν η αναφορά παράγει τόσο την αρχική γραμμή `-webkit-*` όσο και μία παραγόμενη, το TailwindPHP παράγει μία γραμμή.
- Τα ψευδοστοιχεία με υποβαθμισμένο επίπεδο (`::file-selector-button`, `::-webkit-datetime-edit-*`) παραμένουν στις αρχικές λίστες επιλογέων τους αντί να διαχωρίζονται σε έναν κανόνα ανά ψευδοστοιχείο.
- Οι αρχικές συμβολοσειρές με μονά εισαγωγικά παραμένουν έτσι (`'Segoe UI'`) αντί να κανονικοποιούνται σε διπλά εισαγωγικά.
- Συνυπάρχουσες ιδιότητες longhand δεν συνδυάζονται σε shorthand (η ίδια η έξοδος του Tailwind δεν το χρειάζεται ποτέ).
- Το `.p-0` διατηρεί το `padding: 0px`, ενώ η αναφορά CLI παράγει το `padding: 0`, επειδή το εξαγόμενο σώμα δοκιμών καθορίζει τη μορφή `0px`. Ο ελαχιστοποιητής το συντομεύει σε `0`.

### Δεν περιλαμβάνεται

Το TailwindPHP είναι μεταγλωττιστής CSS. Δεν περιλαμβάνει τα εργαλεία επεξεργαστή του οικοσυστήματος Tailwind (IntelliSense, αυτόματη συμπλήρωση, ταξινόμηση κλάσεων) ούτε source maps, επομένως το CLI δεν διαθέτει επιλογή `--map`.

### Σάρωση περιεχομένου

Τα `tw::generate()` και `TailwindCompiler::generate()` διαβάζουν ονόματα κλάσεων μόνο από τα γνωρίσματα `class` και `className`. Για ονόματα κλάσεων που βρίσκονται σε συμβολοσειρές PHP ή JavaScript, χρησιμοποιήστε τα [`tw::extractCandidatesFromStrings()`](https://tailwindphp.inline0.dev/el/docs/api#twextractcandidatesfromstrings) ή `@source inline("…")`. Οι μορφές διαδρομής του `@source` αγνοούνται από το API και λαμβάνονται υπόψη μόνο εν μέρει από το CLI (δείτε παρακάτω).

### Γνωστά ζητήματα στην τρέχουσα έκδοση

| Περιοχή | Τρέχουσα συμπεριφορά | Ζήτημα |
|---|---|---|
| CLI `@source` | Οι διαδρομές και τα μοτίβα glob δεν εφαρμόζονται· αντί γι' αυτά γίνεται σάρωση του καταλόγου του αρχείου εισόδου και το `@source not` δεν αποκλείει τίποτα. Δείτε [Τι σαρώνει το CLI](https://tailwindphp.inline0.dev/el/docs/cli#what-the-cli-scans) | [#8](https://github.com/inline0/tailwindphp/issues/8) |
| CLI `--optimize` | Εκτελεί ελαχιστοποίηση, όπως το `--minify` | [#9](https://github.com/inline0/tailwindphp/issues/9) |
| Μεγάλες επιλογές CLI | Το `--input file.css` (με διαχωρισμό διαστήματος) αγνοείται· χρησιμοποιήστε το `--input=file.css` ή το `-i file.css` | [#13](https://github.com/inline0/tailwindphp/issues/13) |
| Παραλλαγές προσθέτων | Οι παραλλαγές `addVariant()`/`matchVariant()` και οι τροποποιητές τυπογραφικών στοιχείων (`prose-headings:` …) μεταγλωττίζονται χωρίς τον επιλογέα τους | [#10](https://github.com/inline0/tailwindphp/issues/10) |
| Μείγματα `@apply` | Το `@apply --my-mixin;` απορρίπτεται αντί να προωθείται | [#12](https://github.com/inline0/tailwindphp/issues/12) |
| Εισαγωγές αναφοράς | Η έξοδος είναι κενή όταν μια εισαγωγή αναφοράς προηγείται της εισαγωγής utilities· το `@import "tailwindcss" reference` δεν έχει αποτέλεσμα | [#14](https://github.com/inline0/tailwindphp/issues/14) |

## Σημειώσεις αναβάθμισης

### 1.7.0

- **Η έξοδος αλλάζει σε επίπεδο byte** σε σύγκριση με το 1.6.x, ενώ παραμένει λειτουργικά ισοδύναμη με την αναφορά TailwindCSS v4.3.3. Ορισμένες ορατές αλλαγές:
  - Πολλαπλασιαστές διαστημάτων: το `p-1` παράγει `padding: var(--spacing)` αντί για `calc()`, ενώ ο πολλαπλασιαστής `0` παράγει μήκος μηδέν χωρίς μονάδα.
  - Τα κλάσματα μετατρέπονται σε ποσοστά: το `w-1/2` παράγει `width: 50%`.
  - Χρώματα: η φωτεινότητα των `oklch()`/`oklab()` σειριοποιείται ως ποσοστό (`oklch(62.3% .214 259.815)`), ενώ τα `white` και `black` συντομεύονται σε `#fff` και `#000`.
  - Τα ψευδοστοιχεία CSS2 σειριοποιούνται με μία άνω και κάτω τελεία (`:before`, `:after`, `:first-letter`, `:first-line`).
  - Οι ένθετοι κανόνες `@media`/`@supports`/`@container` ισοπεδώνονται επιτόπου, με τη σειρά του πηγαίου κώδικα, αντί να μεταφέρονται στο τέλος· οι δηλώσεις αναδιατάσσονται σύμφωνα με τη σειρά του lightningcss και αφαιρούνται οι επισκιασμένες διπλές δηλώσεις.
- **Οι προσωρινές μνήμες με κλειδί την έξοδο ακυρώνονται μία φορά.** Η προσωρινή μνήμη αρχείων του `tw::generate()` δεν περιλαμβάνει την έκδοση TailwindPHP στο κλειδί της, οπότε μετά την αναβάθμιση εκτελέστε το `tw::clearCache()` (ή τον κατάλογο που περάσατε ως `cache`). Η [προσωρινή μνήμη κατάστασης μεταγλωττιστή](https://tailwindphp.inline0.dev/el/docs/advanced/caching#compiler-state-cache) ακυρώνεται αυτόματα.
- **Νέο:** `@variant` σε σύνταξη CSS, μείγματα CSS στο `@apply`, `@media reference` και `@import "…" reference`, πλήρης μηχανή `--value()`/`--modifier()` για λειτουργικά `@utility`, αυστηρότερη επικύρωση ονομάτων `@utility` και η επιλογή `polyfills` του `tw::compile()`.

### 1.6.1

- **Νέο:** το βοηθητικό `container` (`width: 100%` συν ένα `max-width` ανά σημείο διακοπής).
- Οι συνδυασμένες μεταβλητές `--tw-*` (μετατόπιση, κλίμακα, περιστροφή, λοξή παραμόρφωση, φίλτρα και άλλα) δηλώνονται πλέον στο `@property`, ώστε τα φύλλα στυλ να αποκτούν αυτούς τους κανόνες `@property` και μετασχηματισμοί όπως το `translate-x-7` να εφαρμόζονται στο πρόγραμμα περιήγησης.

### 1.6.0

- **Νέο:** η μόνιμη προσωρινή μνήμη κατάστασης μεταγλωττιστή (`stateCacheFile` σε `tw::compile()` και `TailwindCompiler`, `StateCache\compileCssCached()`) και οι διακριτές συναρτήσεις `parseCssState()`/`finalizeCssState()`/`compileParsed()`. Οι υπάρχουσες κλήσεις λειτουργούν ακριβώς όπως πριν.

### 1.5.0

- Οι υποκλάσεις του `TailwindCompiler` που παρακάμπτουν το `generate()` ή το `css()` πρέπει να προσθέσουν την προαιρετική παράμετρο `bool $minify = false`· το PHP απορρίπτει παρακάμψεις που παραλείπουν προαιρετική παράμετρο της γονικής κλάσης.
- Η ελαχιστοποιημένη έξοδος προέρχεται από τον σειριοποιητή, επομένως τα ελαχιστοποιημένα byte διαφέρουν ελαφρώς από το 1.4.x (οι προσωρινές μνήμες με κλειδί την ελαχιστοποιημένη έξοδο ακυρώνονται μία φορά).
- **Νέο:** τα `generateExact()` και `cssExact()` για CSS ανά σελίδα από έναν μεταγλωττιστή μεγάλης διάρκειας ζωής.
