Első lépések a Lilyvel
Válassz egy keretrendszert, klónozd a monorepót, nyisd meg a fej nélküli könyvtárát vagy a példaalkalmazását, és kezdj saját oldalakat összeállítani. Vezetett útra vágysz? Kezdd az oktatóanyagokkal.
Telepítés
A Lily egyetlen Git-monorepóban él, minden keretrendszer fej nélküli könyvtárának, segédcsomagjainak és példaalkalmazásának külön könyvtárával. A leggyorsabb kipróbálás: klónozd a monorepót, és nyisd meg a fej nélküli könyvtárat a saját technológiai veremedhez:
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-react-headless
pnpm install
Ugyanez a minta működik a többi keretrendszerhez is:
@lilydesignsystem/html-headless– nem kell telepíteni; másold a.htmlfájlokat@lilydesignsystem/svelte-headless—pnpm install@lilydesignsystem/react-headless—pnpm install@lilydesignsystem/vue-headless—pnpm install@lilydesignsystem/angular-headless—pnpm install@lilydesignsystem/nunjucks-headless—pnpm installlily-design-system-blazor-headless—dotnet build
A fej nélküli könyvtárakat klónozásra vagy beemelésre tervezték – tekintsd a forráskódot az igazság forrásának, és másold, amire szükséged van. beállítássegédek ezenfelül telepíthető csomagokként is kaphatók build- és kiadási csővezetékkel (npm a JS-keretrendszerekhez, NuGet a Blazorhoz).
Fej nélküli komponens használata
A fej nélküli komponensek szemantikus HTML-t, ARIA-t és tulajdonságokat adnak – de CSS-t nem. Íme egy Button minden keretrendszerben:
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" }) }}
Stílusozott példa használata
A példaalkalmazások CSS-t, útvonalakat és teljes demóoldalakat tartalmaznak. A legjobb kísérletezési mód a SvelteKit-, Next-, Nuxt-, Analog- vagy Eleventy-példaalkalmazás elindítása, és a demó megtekintése itt: /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
Utána nyisd meg a http://localhost:5173 címet, és böngéssz itt: /components.
Stílusozás és tervezési tokenek
Minden komponens egyetlen kebab-case osztállyal renderelődik a gyökérelemén. Például a <Button> így renderelődik: <button class="button">. Stílusozd úgy, ahogy akarod:
.button {
background: var(--my-primary);
color: #fff;
padding: 0.75rem 1.5rem;
border-radius: 0.5rem;
}
.button:hover { background: var(--my-primary-hover); }
A Lily alapértelmezett színpalettája (a példaalkalmazásokban használt):
- Elsődleges:
#2563eb - Veszély:
#dc2626 - Figyelmeztetés:
#f59e0b - Siker:
#16a34a - Oldalháttér:
#f9fafb - Kártyaháttér:
#ffffff
Ezek javaslatok, nem követelmények. Cseréld le őket a saját márkapalettádra, és a Lily örömmel követi.
Kész témák
Nem akarsz CSS-t írni a nulláról? A Lily 57 önálló referenciatémát szállít a themes/ könyvtárban. Mindegyik egy-egy stíluslap, amely a Lily osztályhorgait célozza – linkeld be, és már stílusozott vagy:
<link rel="stylesheet" href="/assets/themes/united-kingdom-government-digital-service.css" />
A készlet a következőket fedi le:
- Közszféra – NHS England, NHS Scotland és NHS Wales (mindegyik betegeknek és szakembereknek szóló változatban), GOV.UK GDS és a U.S. Web Design System.
- Szállítók által ihletett – Adobe Spectrum, Mozilla Protocol.
- Általános célú – light, dark, nord, dracula, wireframe és még vagy harminc.
A témaválasztók a :where(...)-t használják, így a saját CSS-ed mindig nyer a specificitásban. Párosítsd őket az alábbi theme-picker segéddel a futásidejű váltáshoz, vagy kövesd a
témázási oktatóanyagot.
Beállítássegédek
Minden keretrendszernek nyolc kis választója van, mindegyik saját
lily-design-system-{framework}-{package} csomag (és egy picker-bar , amely összeállítja őket). Mindegyik egy fej nélküli ikongomb, amely előugró ablakot nyit – listadobozt, linklistát, keresőűrlapot vagy (a date-time-picker esetében) dátumválasztó párbeszédpanelt –, nem natív
<select>; SSR-biztos; és nem szállít CSS-t:
-
theme-picker – futásidőben tölti be a témák stíluslapjait egy kezelt
<link>cseréjével, beállítja adata-themeattribútumot a dokumentumon, és igény szerint tartósan elmenti ide:localStorage. -
locale-picker – beállítja a
langés adirattribútumot (automatikus RTL-érzékeléssel), hogy az i18n-könyvtárad követhesse; maga nem fordít semmit. -
text-size-picker – beállítja a
data-text-sizeattribútumot a dokumentumon; a CSS-ed rendeli hozzá az egyes értékekhez a betűméretet. -
motion-picker – beállítja a
data-motionattribútumot a dokumentumon, a látogató csökkentett mozgás beállításából kiindulva; a CSS-ed és a szkriptjeid döntik el, mit kell elnyomni. - search-picker – egy ikongomb, amely keresőmezőt nyit; a beküldés egy keresőoldalra navigál. Egy műveletet birtokol, nem beállítást.
- link-picker – egy otthon ikon, amely megnyitja az alkalmazásod által meghatározott oldallinkek menüjét (Kezdőlap, Rólunk, Kapcsolat, Adatvédelmi irányelvek, …). Egy műveletet birtokol, nem beállítást.
- share-picker – megnyitja a natív megosztási lapot vagy a fogyasztó által megadott célok listáját, plusz az URL másolását. Egy műveletet birtokol, nem beállítást: semmit nem alkalmaz, semmit nem ment.
-
date-time-picker – egy szövegmező plusz egy APG-dátumválasztó párbeszédpanel dátumhoz, időhöz vagy mindkettőhöz. Egy űrlapértéket birtokol, nem beállítást: az ISO-karakterlánc oda-vissza alakítható ide:
<input type="date">.
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-svelte-theme-picker
A Svelte-katalógus a kanonikus referencia; a React-, Vue-, Angular-, HTML-, Nunjucks-, Web Components- és Blazor-portok szerződésről szerződésre megfelelnek neki. Lásd a segédek oktatóanyagát.
Hozzáférhetőség
A komponensek célja a WCAG 2.2 AAAszint. Ezeket a mintákat követik:
- Szemantikus HTML-elemek az általános
<div>s. <label for="id">-ek helyett, amelyek a címkéket a bemenetekhez kötik.aria-labelledby/aria-describedbya kereszthivatkozásokhoz.aria-invalid+aria-errormessagea hibaállapotokhoz.role="alert"ésaria-livea dinamikus tartalomhoz.aria-pressed,aria-expanded,aria-currentaz állapothoz.- Roving
tabindexa rácsokhoz.
A fókuszjelzőket szándékosan a fogyasztó adja – a Lily soha nem rajzol olyan alapértelmezett fókuszgyűrűt, amely ütközne a terveddel. A példaalkalmazások tiszta axe-core alapvonalat tartanak az összes útvonalukon.
Nemzetköziesítés
Minden címke, helyőrző, hibaüzenet és gombfelirat tulajdonság. Nincsenek beégetett karakterláncok. Kapcsold be a választott fordítási keretrendszert – Paraglide, i18next, vue-i18n, react-intl, .resx-fájlok, bármi.
Dátumokhoz, számokhoz és pénznemekhez a komponensek előre formázott karakterláncokat fogadnak: te formázol a Intl.DateTimeFormat /
Intl.NumberFormat / a kedvenc könyvtáraddal, és átadod az eredményt.
A locale-picker segéd a kiválasztott nyelvi beállítást jelzi az i18n-könyvtáradnak a lang és a dir beállításával a dokumentum gyökerén.
Tesztelés
Minden keretrendszer-alprojekt saját, a keretrendszerre jellemző technológiai veremmel készült teszteket szállít:
- HTML: valódi böngészőket futtató WebDriverIO.
- Svelte: Vitest +
@testing-library/svelte. - React: Vitest +
@testing-library/react. - Vue: Vitest +
@testing-library/vue. - Angular: Vitest + TestBed (az Analog Vite-bővítményén keresztül).
- Nunjucks: Vitest renderelő segéddel.
- Blazor: bUnit.
A tesztek csak a Vitest beépített illesztőit használják – soha nem a
jest-dom -illesztőket. Ez hordozhatóvá teszi a tesztcsomagokat. A példaalkalmazások Playwright végpontok közötti csomagokat, axe-core hozzáférhetőségi alapvonalakat és reszponzív nézetablak-átvizsgálást adnak hozzá.
MI-ügynökök
Ez a webhely a gyökerében közzéteszi a llms.txt és a llms.json fájlt – a legfontosabb oldalainak gondozott térképét, minden olyan eszköznek, amely követi az llms.txt konvenciót.
A kanonikus monorepo ezenfelül két
Claude Skills:
lily-design-system-skill-t szállít: egy általános célú készséget, amely a Lily fogalmait, terminológiáját és összeállítási mintáit fedi le mindenkinek, aki a rendszerrel épít, és lily-design-system-maintainer-skill-t, egy műszaki készséget, amely a monorepo kötelező fájlszerkezetét és eszközeit fedi le mindenkinek, aki rajta dolgozik. Mindkettő a
kanonikus monorepo gyökerében.
Hibaelhárítás
Egy komponens megjelenik, de stílustalannak tűnik
Ez a fej nélküli működés a tervezett módon – a komponenshez nem tartozik CSS. Vagy írj CSS-t a komponens kebab-case osztályára (minden katalógusoldalon látható), vagy linkeld be az 57 kész téma.
A CSS-em nem tűnik érvényesnek egy téma fölött
Érvényesnek kellene lennie – a témaválasztók :where(...)-be vannak csomagolva, amelynek nulla a specificitása. Ha egy szabály mégis veszít, ellenőrizd, hogy a stíluslapod a téma <link> után töltődik-e be, és hogy a választó valóban illeszkedik-e a komponens osztályhorgához.
A pnpm install peer- vagy verziós hibával meghiúsul
Használj aktuális pnpm-et (v10+) és Node 22+-t. Minden alprojekt a keretrendszer-verzióit a saját package.jsonfájljában rögzíti; ha a globális eszközláncod régebbi, a pnpm env use --global lts a leggyorsabb megoldás.
A képernyőolvasó rossz nevet jelent be egy vezérlőhöz
Ellenőrizd a komponens kötelező label tulajdonságát – a látható szöveg nélküli komponenseknek kell egy, és a fogyasztó által megadott
aria-label / aria-labelledby amely a rest-propson át érkezik, szándékosan felülírja a beépített huzalozást. Minden katalógusoldal dokumentálja a komponens ARIA-szerződését.
A theme-picker segéd nem vált stíluslapot
Győződj meg róla, hogy a themesUrl olyan könyvtárra mutat, amelyet a böngésző le tud kérni (szolgáld ki a themes/ fájlokat statikus erőforrásként), és hogy a themes tulajdonságodban a témák azonosítói egyeznek a fájlnevekkel. A segéd egyetlen kezelt href elem
<link data-lily-theme-picker> attribútumát cseréli – vizsgáld meg a fejlesztői eszközökben, hogy lásd a kért URL-t.
Valami más romlott el
Nyiss egy issue-t minimális reprodukcióval itt: github.com/LilyDesignSystem/lily-design-system – vagy lásd a közösség és támogatás.
Közreműködés
A Lily fiatal, és szívesen fogadja az együttműködést. A jelenleg leghasznosabb hozzájárulások:
- Új komponensek (különösen bevált tervezési rendszerek mintái).
- Új témák – mindegyik egy önálló stíluslap, jól körülhatárolt első PR.
- Jobb példastílusozás – mutasd meg, mi lehetséges.
- A példaalkalmazás karakterláncainak fordításai.
- Hibajelentések minimális reprodukcióval.
- Hozzáférhetőségi auditok képernyőolvasókkal és kisegítő technológiákkal.
Nyiss issue-kat és PR-eket itt: github.com/LilyDesignSystem/lily-design-system.
Közösség és támogatás
- Kérdések és hibajelentések – nyiss egy issue-t itt: github.com/LilyDesignSystem/lily-design-system.
- E-mail – a karbantartó olvassa a joel@joelparkerhenderson.com címet, és szívesen fogadja az együttműködést, az útmutatást és a visszajelzést.
- Tükrök – a Lily ide is fel van töltve: Codeberg és GitLab, hogy az általad preferált forge-ról is részt vehess.
- Magatartás – a projekt egy szokásos magatartási kódexet követ; légy kedves, feltételezz jóhiszeműséget.
GYIK
Miért fej nélküli a stílusozott helyett?
Az előre stílusozott komponensek kényelmesek – amíg nem illenek a márkádhoz. A fej nélküli komponensek eleinte kicsit több munkát igényelnek, de teljes kontrollt adnak a vizuális tervezés fölött. A példaalkalmazások és az 57 téma megmutatja a stílusozás módjait; átveheted őket, vagy teljesen lecserélheted. A hosszabb érvelés itt található: Miért a Lily.
Miért van ennyi komponens?
A Lily célja, hogy lefedje azokat a mintákat, amelyekre a legtöbb alkalmazásnak szüksége van, anélkül, hogy a nulláról kellene felépítened őket – beleértve a mély ügyeket, mint a nemzeti azonosítók bemenetei és a szerkesztői scrollytelling. A katalógus egy tucat bevált tervezési rendszerből és saját munkából merít – lásd a Névjegy.
Használhatom a Lilyt a Tailwinddel?
Igen. Minden komponens egyetlen kebab-case gyökérosztályt tesz elérhetővé, plusz egy, a fogyasztó által megadott className / classértéket. Rétegezz Tailwind-segédosztályokat felülre, ahogy akarsz.
Használhatom a Lilyt szemantikus CSS-keretrendszerekkel, mint a DaisyUI?
Igen. A gyökérelem kebab-case osztálynevei szemantikus CSS-horogként működnek. Párosítsd a Lilyt egy szemantikus keretrendszerrel, és előre stílusozott komponenseket kapsz, amelyek mégis tiszteletben tartják az ARIA-t és az i18n-t.
Van npm-csomag?
A beállítássegédek csomagokként érkeznek npm/NuGet kiadási csővezetékkel. A fej nélküli komponenskönyvtárakat klónozásra vagy beemelésre tervezték – a forráskód maga a szállítmány, így pontosan azt olvashatod, nyirbálhatod és birtokolhatod, amit kiadsz. A fej nélküli könyvtárak regisztrumba való közzététele továbbra is az ütemtervben szerepel.
Miért többes licenc?
A különböző projektek különböző licencigényekkel rendelkeznek. A BSD és az MIT megengedő, az Apache-2.0 szabadalmi engedélyt tartalmaz, a GPL-opciók pedig a copyleftet támogatják. Válaszd azt, amelyik a helyzetedhez illik.
Hogyan jelentek hibát vagy kérek funkciót?
Nyiss egy issue-t a GitHub-tárolóban, vagy írj e-mailt ide: joel@joelparkerhenderson.com.