Prvi koraci s Lilyjem

Odaberite framework, klonirajte monorepozitorij i otvorite njegovu bezglavu biblioteku ili primjernu aplikaciju, pa počnite slagati vlastite stranice. Preferirate vođeni put? Počnite s vodičima.

Instalacija

Lily živi u jednom Git monorepozitoriju, s direktorijem za bezglavu biblioteku, pomoćne pakete i primjernu aplikaciju svakog frameworka. Najbrži način da ga isprobate je klonirati monorepozitorij i otvoriti bezglavu biblioteku za vaš stack:

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-react-headless
pnpm install

Isti obrazac radi za ostale frameworke:

  • @lilydesignsystem/html-headless — instalacija nije potrebna; kopirajte datoteke .html
  • @lilydesignsystem/svelte-headless — pnpm install
  • @lilydesignsystem/react-headless — pnpm install
  • @lilydesignsystem/vue-headless — pnpm install
  • @lilydesignsystem/angular-headless — pnpm install
  • @lilydesignsystem/nunjucks-headless — pnpm install
  • lily-design-system-blazor-headless — dotnet build

Bezglave biblioteke dizajnirane su da se kloniraju ili ugrađuju — izvorni kod smatrajte izvorom istine i kopirajte što vam treba. pomoćnici za postavke dodatno se isporučuju kao instalabilni paketi s cjevovodom za izgradnju i objavu (npm za JS frameworke, NuGet za Blazor).

Upotreba bezglave komponente

Bezglave komponente isporučuju semantički HTML, ARIA i svojstva — ali ne i CSS. Evo Buttona u svakom frameworku:

HTML

<button class="button" type="button" aria-label="Save">
  Save
</button>

Svelte

<script>
  import Button from "lily-design-system-svelte-headless/components/Button/Button.svelte";
</script>

<Button onclick={save}>Save</Button>

React

import Button from "lily-design-system-react-headless/components/Button";

<Button onClick={save}>Save</Button>

Vue

<script setup>
  import Button from "lily-design-system-vue-headless/components/Button.vue";
</script>

<Button @click="save">Save</Button>

Angular

import { Button } from "@lilydesignsystem/angular-headless";

@Component({
  imports: [Button],
  template: `<lily-button (click)="save()">Save</lily-button>`,
})

Blazor

<Button OnClick="Save">Save</Button>

Nunjucks

{% from "components/button/macro.njk" import button %}

{{ button({ text: "Save", type: "button" }) }}

Upotreba stiliziranog primjera

Primjerne aplikacije uključuju CSS, rute i potpune demo stranice. Najbrži način eksperimentiranja je pokrenuti primjernu aplikaciju za SvelteKit, Next, Nuxt, Analog ili Eleventy i pogledati demo na /components.

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-svelte-sveltekit-examples
pnpm install
pnpm run dev

Zatim otvorite http://localhost:5173 i pregledavajte /components.

Stiliziranje i dizajnerski tokeni

Svaka se komponenta renderira s jednom klasom u kebab-caseu na svom korijenskom elementu. Na primjer, <Button> se renderira kao <button class="button">. Stilizirajte ga kako želite:

.button {
  background: var(--my-primary);
  color: #fff;
  padding: 0.75rem 1.5rem;
  border-radius: 0.5rem;
}
.button:hover { background: var(--my-primary-hover); }

Zadana paleta boja Lilyja (korištena u primjernim aplikacijama) je:

  • Primarna: #2563eb
  • Opasnost: #dc2626
  • Upozorenje: #f59e0b
  • Uspjeh: #16a34a
  • Pozadina stranice: #f9fafb
  • Pozadina kartice: #ffffff

To su prijedlozi, a ne zahtjevi. Zamijenite ih paletom vlastitog brenda i Lily rado slijedi.

Gotove teme

Ne želite pisati CSS od nule? Lily isporučuje 57 samostalnih referentnih tema u direktoriju themes/ . Svaka je jedan stilski list koji cilja kuke klasa Lilyja — povežite ga i stilizirani ste:

<link rel="stylesheet" href="/assets/themes/united-kingdom-government-digital-service.css" />

Skup obuhvaća:

  • Javni sektor — NHS England, NHS Scotland i NHS Wales (svaka u varijantama za pacijente i za praktičare), GOV.UK GDS i U.S. Web Design System.
  • Nadahnuto dobavljačima — Adobe Spectrum, Mozilla Protocol.
  • Opća namjena — light, dark, nord, dracula, wireframe i tridesetak drugih.

Selektori tema koriste :where(...), pa vaš vlastiti CSS uvijek pobjeđuje u specifičnosti. Uparite ih s pomoćnikom theme-picker u nastavku za promjenu tijekom izvođenja ili slijedite vodič o temama.

Pomoćnici za postavke

Svaki framework ima osam malih birača, svaki je zaseban paket lily-design-system-{framework}-{package} (i jedan picker-bar koji ih sastavlja). Svaki je bezglavi gumb s ikonom koji otvara skočni prozor — popis, popis poveznica, obrazac za pretraživanje ili (za date-time-picker) dijalog za odabir datuma — ne nativni <select>; siguran je za SSR; i ne isporučuje CSS:

  • theme-picker — učitava stilske listove tema tijekom izvođenja zamjenom upravljanog <link>, postavlja data-theme na dokumentu i po želji trajno sprema u localStorage.
  • locale-picker — postavlja lang i dir (s automatskim otkrivanjem RTL-a) da vaša i18n biblioteka može pratiti; sam ništa ne prevodi.
  • text-size-picker — postavlja data-text-size na dokumentu; vaš CSS preslikava svaku vrijednost na veličinu fonta.
  • motion-picker — postavlja data-motion na dokumentu, polazeći od posjetiteljeve postavke smanjenog kretanja; vaš CSS i skripte odlučuju što potisnuti.
  • search-picker — gumb s ikonom koji otvara polje za pretraživanje; slanje vodi na stranicu pretraživanja. Posjeduje radnju, a ne postavku.
  • link-picker — ikona kuće koja otvara izbornik poveznica stranica koje definira vaša aplikacija (Početna, O nama, Kontakt, Pravila privatnosti, …). Posjeduje radnju, a ne postavku.
  • share-picker — otvara nativni list za dijeljenje ili popis odredišta koji daje potrošač, plus kopiranje URL-a. Posjeduje radnju, a ne postavku: ništa ne primjenjuje, ništa ne sprema.
  • date-time-picker — tekstno polje plus APG dijalog za odabir datuma za datum, vrijeme ili oboje. Posjeduje vrijednost obrasca, a ne postavku: ISO niz pretvara se naprijed-natrag u <input type="date">.
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-svelte-theme-picker

Svelte katalog je kanonska referenca; portovi za React, Vue, Angular, HTML, Nunjucks, Web Components i Blazor odgovaraju mu ugovor po ugovor. Pogledajte vodič o pomoćnicima.

Pristupačnost

Komponente ciljaju na WCAG 2.2 AAA. Slijede ove obrasce:

  • Semantički HTML elementi umjesto općih <div>s.
  • <label for="id"> koji povezuju oznake s ulazima.
  • aria-labelledby / aria-describedby za unakrsne reference.
  • aria-invalid + aria-errormessage za stanja pogreške.
  • role="alert" i aria-live za dinamički sadržaj.
  • aria-pressed, aria-expanded, aria-current za stanje.
  • Roving tabindex za rešetke.

Pokazatelje fokusa namjerno daje potrošač — Lily nikada ne crta zadani prsten fokusa koji bi se sukobljavao s vašim dizajnom. Primjerne aplikacije održavaju čistu axe-core osnovicu na svim svojim rutama.

Internacionalizacija

Svaka oznaka, rezervirano mjesto, poruka o pogrešci i tekst gumba svojstvo je. Nema tvrdo zapisanih nizova. Uključite framework za prevođenje po svom izboru — Paraglide, i18next, vue-i18n, react-intl, .resx datoteke, bilo što.

Za datume, brojeve i valute komponente primaju unaprijed oblikovane nizove: oblikujete pomoću Intl.DateTimeFormat / Intl.NumberFormat / svoje omiljene biblioteke i prosljeđujete rezultat.

Pomoćnik locale-picker signalizira odabrani lokal vašoj i18n biblioteci postavljanjem lang i dir na korijenu dokumenta.

Testiranje

Svaki podprojekt frameworka isporučuje vlastite testove koristeći svoj idiomatski stack:

  • HTML: WebDriverIO koji pokreće stvarne preglednike.
  • Svelte: Vitest + @testing-library/svelte.
  • React: Vitest + @testing-library/react.
  • Vue: Vitest + @testing-library/vue.
  • Angular: Vitest + TestBed (preko Analog Vite dodatka).
  • Nunjucks: Vitest s pomoćnikom za renderiranje.
  • Blazor: bUnit.

Testovi koriste samo Vitestove ugrađene matchere — nikada matchere jest-dom . To održava skupove testova prenosivima. Primjerne aplikacije dodaju Playwright end-to-end skupove, axe-core osnovice pristupačnosti i pregled responzivnih viewporta.

AI agenti

Ova stranica objavljuje llms.txt i llms.json u svom korijenu — kuriranu kartu svojih najvažnijih stranica, za bilo koji alat koji slijedi konvenciju llms.txt.

Kanonski monorepozitorij dodatno isporučuje dvije Claude Skills: lily-design-system-skill: općenamjensku vještinu koja pokriva Lilyjeve pojmove, terminologiju i obrasce slaganja za svakoga tko gradi sustavom, i lily-design-system-maintainer-skill, tehničku vještinu koja pokriva raspored obveznih datoteka i alate monorepozitorija za svakoga tko radi na njemu. Obje se nalaze u korijenu kanonskog monorepozitorija.

Rješavanje problema

Komponenta se renderira, ali izgleda nestilizirano

To je bezglavost koja radi kako je zamišljeno — uz komponentu ne dolazi nikakav CSS. Ili napišite CSS za klasu komponente u kebab-caseu (prikazanu na svakoj stranici kataloga) ili povežite jednu od 57 gotovih tema.

Čini se da se moj CSS ne primjenjuje preko teme

Trebao bi — selektori tema omotani su u :where(...), što ima nultu specifičnost. Ako pravilo ipak gubi, provjerite učitava li se vaš stilski list nakon <link> teme i odgovara li selektor doista kuki klase komponente.

pnpm install ne uspijeva s pogreškom peera ili verzije

Koristite aktualni pnpm (v10+) i Node 22+. Svaki podprojekt učvršćuje verzije svog frameworka u vlastitom package.json; ako je vaš globalni lanac alata stariji, pnpm env use --global lts je najbrži popravak.

Čitač zaslona izgovara pogrešan naziv za kontrolu

Provjerite obvezno svojstvo label komponente — komponente bez vidljivog teksta zahtijevaju ga, a potrošačevo aria-label / aria-labelledby proslijeđeno preko rest-propsa namjerno pobjeđuje ugrađeno ožičenje. Svaka stranica kataloga dokumentira ARIA ugovor komponente.

Pomoćnik theme-picker ne mijenja stilske listove

Potvrdite da themesUrl pokazuje na direktorij koji preglednik može dohvatiti (posluživajte datoteke themes/ kao statične resurse) i da se kratki nazivi tema u vašem svojstvu themes podudaraju s nazivima datoteka. Pomoćnik zamjenjuje href jednog upravljanog <link data-lily-theme-picker> — pregledajte ga u razvojnim alatima da vidite traženi URL.

Nešto drugo je pokvareno

Otvorite issue s minimalnom reprodukcijom na github.com/LilyDesignSystem/lily-design-system — ili pogledajte zajednica i podrška.

Doprinos

Lily je mlad i pozdravlja suradnju. Najkorisniji doprinosi trenutno su:

  • Nove komponente (osobito obrasci iz uhodanih dizajnerskih sustava).
  • Nove teme — svaka je jedan samostalan stilski list, dobro ograničen prvi PR.
  • Bolje stiliziranje primjera — pokažite što je moguće.
  • Prijevodi nizova primjernih aplikacija.
  • Prijave grešaka s minimalnom reprodukcijom.
  • Revizije pristupačnosti s čitačima zaslona i pomoćnim tehnologijama.

Otvarajte issue-e i PR-ove na github.com/LilyDesignSystem/lily-design-system.

Zajednica i podrška

Česta pitanja

Zašto bezglavo umjesto stilizirano?

Unaprijed stilizirane komponente su praktične — dok ne odgovaraju vašem brendu. Bezglave komponente traže malo više posla na početku, ali vam daju potpunu kontrolu nad vizualnim dizajnom. Primjerne aplikacije i 57 tema pokazuju načine stiliziranja; možete ih preuzeti ili u potpunosti zamijeniti. Dulji argument je na Zašto Lily.

Zašto toliko komponenti?

Lily želi pokriti obrasce koji su potrebni većini aplikacija bez prisiljavanja da ih gradite od nule — uključujući duboke stvari poput unosa nacionalnih identifikatora i uredničkog scrollytellinga. Katalog crpi iz desetak uhodanih dizajnerskih sustava plus vlastitog rada — pogledajte O projektu.

Mogu li koristiti Lily s Tailwindom?

Da. Svaka komponenta izlaže jednu korijensku klasu u kebab-caseu plus potrošačevo className / class. Slažite Tailwind uslužne klase povrh kako želite.

Mogu li koristiti Lily sa semantičkim CSS frameworkima poput DaisyUI-ja?

Da. Nazivi klasa u kebab-caseu na korijenskom elementu rade kao semantičke CSS kuke. Uparite Lily sa semantičkim frameworkom i dobivate unaprijed stilizirane komponente koje ipak poštuju ARIA i i18n.

Postoji li npm paket?

Pomoćnici za postavke isporučuju se kao paketi s npm/NuGet cjevovodom objave. Bezglave biblioteke komponenti dizajnirane su da se kloniraju ili ugrađuju — izvorni kod je isporuka, pa možete čitati, kratiti i posjedovati točno ono što isporučujete. Objava bezglavih biblioteka u registre ostaje na planu razvoja.

Zašto više licenci?

Različiti projekti imaju različite licencne potrebe. BSD i MIT su permisivne, Apache-2.0 ima patentnu dozvolu, a GPL opcije podupiru copyleft. Odaberite što odgovara vašoj situaciji.

Kako prijaviti grešku ili zatražiti značajku?

Otvorite issue u GitHub repozitoriju ili pošaljite e-poštu na joel@joelparkerhenderson.com.