Liigu sisu juurde

Klasside utiliidid

Mallides class-atribuutide loomine tähendab stringide ühendamist, klasside tingimuslikku vahetamist ja hilisemate utiliitide varasematega konflikti sattumise vältimist (p-2 ja p-4 ei tohiks mõlemad alles jääda). JavaScript on see töö jagatud kahe vahel: clsx ja tailwind-merge. TailwindPHP sisaldab mõlema PHP teisendusi, nii et saad sama käitumise ilma Node.js tööriistaahela ja lisapakettideta Composer.

Spektri katavad kolm funktsiooni: cn() loob ja lahendab konfliktid, merge() lahendab ainult konfliktid ning join() üksnes ühendab.

cn()

Soovitatav utiliit. Esmalt loob see tingimuslikke klasse clsx-i stiilis, seejärel lahendab Tailwind-konfliktid tailwind-merge abil — seega jääb kehtima viimane konfliktne utiliit.

PHP
use function TailwindPHP\cn;

// Conflicts are resolved — px-4 overrides px-2
cn('px-2 py-1', 'px-4');
// => 'py-1 px-4'

// Conditional classes via a key => bool array
cn('btn', ['btn-primary' => true, 'btn-disabled' => false]);
// => 'btn btn-primary'

Lubatud argumendid

cn() aktsepteerib suvalise arvu argumente. Iga argument tasandatakse ja filtreeritakse clsx-i semantika järgi:

Argument Käitumine
string Lisatakse muutmata kujul.
int / float Teisendatakse stringiks ja lisatakse.
Järjestikune massiiv Iga elementi töödeldakse rekursiivselt.
key => bool-massiiv Iga võtmepaar lisatakse, kui selle väärtus on tõene.
null, false, 0, '' Eiratakse.
PHP
cn('flex', ['items-center' => true], ['p-4', ['gap-2']], null);
// => 'flex items-center p-4 gap-2'

Komponendi muster

cn() muudab komponendi ülekirjutatavaks: ühenda komponendi enda klassid kutsuja edastatutega ning konfliktid lahendatakse kutsuja kasuks.

PHP
use function TailwindPHP\cn;

function Card(array $props = []): string {
    $class = cn(
        'rounded-lg border bg-card text-card-foreground shadow-sm',
        $props['class'] ?? null
    );
    return "<div class=\"{$class}\">" . ($props['children'] ?? '') . "</div>";
}

Card(['class' => 'p-6', 'children' => 'Content']);
// <div class="rounded-lg border bg-card text-card-foreground shadow-sm p-6">Content</div>

Deklaratiivsete, mitmeteljeliste komponendistiilide jaoks kasuta cn() koos variants()-ga.

merge()

Ainult konfliktide lahendamine — tingimuslikku loomist ei toimu. Edasta klassistringid; sama atribuuti mõjutavate klasside korral kirjutavad hilisemad klassid varasemad üle. Kasuta seda siis, kui sisend koosneb juba lihtsatest stringidest.

PHP
use function TailwindPHP\merge;

merge('px-2 py-1 bg-red-500', 'px-4 bg-blue-500');
// => 'py-1 px-4 bg-blue-500'

// Conflict resolution is variant-aware
merge('hover:bg-red-500', 'hover:bg-blue-500');
// => 'hover:bg-blue-500'

cn() on clsx-i peale ehitatud merge(), seega kasuta merge() otse ainult siis, kui sa ei vaja tingimuslikku massiivisüntaksit.

join()

Lihtne ühendamine konfliktide lahendamiseta. Tõeväärtuseta väärtused jäetakse välja, kuid kõik omavahel konfliktis olevad utiliidid säilivad. Kasuta seda siis, kui tead, et konflikte pole ja soovid kõige väiksemat kulu.

PHP
use function TailwindPHP\join;

join('foo', 'bar', null, 'baz');
// => 'foo bar baz'

Millist peaksin kasutama?

Funktsioon Loob (tingimused, massiivid) Lahendab konfliktid Kasuta siis, kui
cn() jah jah Vaikevalik — lood klassistringe, mis võivad konflikti sattuda.
merge() ei jah Sisend on lihtsad stringid; vajad ainult konfliktide lahendamist.
join() jah ei Tead, et konflikte pole, ja soovid teha võimalikult vähe tööd.

Impordid

PHP
use function TailwindPHP\cn;
use function TailwindPHP\merge;
use function TailwindPHP\join;

Kõik kolm asuvad peamises TailwindPHP nimeruumis ja sisalduvad paketis. Need on clsx-i (autor Luke Edwards) ja tailwind-merge (autor Dany Castillo) PHP teisendused.