Začínáme s Lily

Vyberte framework, naklonujte monorepozitář a otevřete jeho bezhlavou knihovnu nebo ukázkovou aplikaci, a začněte skládat vlastní stránky. Dáváte přednost vedené cestě? Začněte s návody.

Instalace

Lily žije v jednom monorepozitáři Gitu, s adresářem pro bezhlavou knihovnu, balíčky pomocníků a ukázkovou aplikaci každého frameworku. Nejrychlejší způsob, jak to vyzkoušet, je naklonovat monorepozitář a otevřít bezhlavou knihovnu pro váš stack:

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

Stejný postup funguje pro ostatní frameworky:

  • @lilydesignsystem/html-headless — instalace není potřeba; zkopírujte soubory .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

Bezhlavé knihovny jsou navrženy tak, aby se klonovaly nebo vendorovaly — berte zdrojový kód jako zdroj pravdy a kopírujte, co potřebujete. pomocníci pro předvolby jsou navíc dodáváni jako instalovatelné balíčky s řetězcem sestavení a publikace (npm pro frameworky JS, NuGet pro Blazor).

Použití bezhlavé komponenty

Bezhlavé komponenty dodávají sémantické HTML, ARIA a vlastnosti — ale žádné CSS. Zde je Button v každém 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" }) }}

Použití nastylovaného příkladu

Ukázkové aplikace obsahují CSS, trasy a plné ukázkové stránky. Nejrychlejší způsob experimentování je spustit ukázkovou aplikaci SvelteKit, Next, Nuxt, Analog nebo Eleventy a prohlédnout si ukázku 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

Pak otevřete http://localhost:5173 a procházejte /components.

Stylování a návrhové tokeny

Každá komponenta se vykresluje s jedinou třídou v kebab-case na svém kořenovém prvku. Například <Button> se vykreslí jako <button class="button">. Nastylujte ji, jak chcete:

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

Výchozí barevná paleta Lily (používaná v ukázkových aplikacích) je:

  • Primární: #2563eb
  • Nebezpečí: #dc2626
  • Varování: #f59e0b
  • Úspěch: #16a34a
  • Pozadí stránky: #f9fafb
  • Pozadí karty: #ffffff

Jsou to návrhy, ne požadavky. Nahraďte je paletou vlastní značky a Lily se rád přizpůsobí.

Hotové motivy

Nechcete psát CSS od nuly? Lily dodává 57 samostatných referenčních motivů v adresáři themes/ . Každý je jeden stylopis cílící na háčky tříd Lily — odkažte ho a jste nastylováni:

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

Sada zahrnuje:

  • Veřejný sektor — NHS England, NHS Scotland a NHS Wales (každý ve variantách pro pacienty a pro odborníky), GOV.UK GDS a U.S. Web Design System.
  • Inspirované dodavateli — Adobe Spectrum, Mozilla Protocol.
  • Obecné použití — light, dark, nord, dracula, wireframe a dalších třicet.

Selektory motivů používají :where(...), takže vaše vlastní CSS vždy vyhrává ve specifičnosti. Spárujte je s pomocníkem theme-picker níže pro přepínání za běhu, nebo se řiďte návodem k motivům.

Pomocníci pro předvolby

Každý framework má osm malých výběrů, každý je samostatný balíček lily-design-system-{framework}-{package} (a picker-bar , který je sestavuje). Každý je bezhlavé tlačítko s ikonou, které otevírá vyskakovací okno — seznam, seznam odkazů, vyhledávací formulář nebo (u date-time-picker) dialog výběru data — ne nativní <select>; je bezpečný pro SSR; a nedodává žádné CSS:

  • theme-picker — načítá stylopisy motivů za běhu výměnou spravovaného <link>, nastavuje data-theme na dokumentu a volitelně ukládá do localStorage.
  • locale-picker — nastavuje lang a dir (s automatickou detekcí RTL), aby ho mohla následovat vaše knihovna i18n; sám nic nepřekládá.
  • text-size-picker — nastavuje data-text-size na dokumentu; vaše CSS mapuje každou hodnotu na velikost písma.
  • motion-picker — nastavuje data-motion na dokumentu, vychází z nastavení omezeného pohybu návštěvníka; vaše CSS a skripty rozhodují, co potlačit.
  • search-picker — tlačítko s ikonou, které otevírá vyhledávací pole; odeslání přejde na stránku hledání. Vlastní akci, ne předvolbu.
  • link-picker — ikona domu, která otevírá nabídku odkazů na stránky, které vaše aplikace definuje (Domů, O nás, Kontakt, Zásady ochrany soukromí, …). Vlastní akci, ne předvolbu.
  • share-picker — otevírá nativní sdílecí list nebo seznam cílů dodaný konzumentem, plus kopírování URL. Vlastní akci, ne předvolbu: nic neaplikuje, nic neukládá.
  • date-time-picker — textové pole plus dialog výběru data podle APG pro datum, čas nebo obojí. Vlastní hodnotu formuláře, ne předvolbu: řetězec ISO se převádí tam a zpět na <input type="date">.
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-svelte-theme-picker

Katalog Svelte je kanonická reference; porty pro React, Vue, Angular, HTML, Nunjucks, Web Components a Blazor mu odpovídají smlouvu po smlouvě. Viz návod k pomocníkům.

Přístupnost

Komponenty míří na WCAG 2.2 AAA. Řídí se těmito vzory:

  • Sémantické prvky HTML místo obecných <div>s.
  • <label for="id"> propojující štítky se vstupy.
  • aria-labelledby / aria-describedby pro křížové odkazy.
  • aria-invalid + aria-errormessage pro chybové stavy.
  • role="alert" a aria-live pro dynamický obsah.
  • aria-pressed, aria-expanded, aria-current pro stav.
  • Roving tabindex pro mřížky.

Indikátory fokusu záměrně dodává konzument — Lily nikdy nevykresluje výchozí fokusový kroužek, který by kolidoval s vaším návrhem. Ukázkové aplikace udržují čistý základ axe-core na všech svých trasách.

Internacionalizace

Každý štítek, zástupný text, chybová zpráva a text tlačítka je vlastnost. Žádné řetězce zapsané napevno. Zapojte překladový framework dle vlastní volby — Paraglide, i18next, vue-i18n, react-intl, soubory .resx, cokoli.

Pro data, čísla a měny komponenty přijímají předformátované řetězce: formátujete pomocí Intl.DateTimeFormat / Intl.NumberFormat / své oblíbené knihovny a výsledek předáte.

Pomocník locale-picker signalizuje zvolené národní prostředí vaší knihovně i18n nastavením lang a dir na kořeni dokumentu.

Testování

Každý podprojekt frameworku dodává vlastní testy využívající jeho idiomatický stack:

  • HTML: WebDriverIO spouštějící skutečné prohlížeče.
  • Svelte: Vitest + @testing-library/svelte.
  • React: Vitest + @testing-library/react.
  • Vue: Vitest + @testing-library/vue.
  • Angular: Vitest + TestBed (přes plugin Vite od Analogu).
  • Nunjucks: Vitest s pomocníkem pro vykreslování.
  • Blazor: bUnit.

Testy používají pouze vestavěné matchery Vitestu — nikdy matchery jest-dom . To udržuje sady testů přenosné. Ukázkové aplikace přidávají sady Playwright end-to-end, základy přístupnosti axe-core a průchod responzivními viewporty.

Agenti AI

Tento web publikuje llms.txt a llms.json ve svém kořeni — kurátorskou mapu svých nejdůležitějších stránek, pro jakýkoli nástroj, který se řídí konvencí llms.txt.

Kanonický monorepozitář navíc dodává dvě Claude Skills: lily-design-system-skill: univerzální dovednost pokrývající pojmy, terminologii a vzory skládání Lily pro každého, kdo se systémem staví, a lily-design-system-maintainer-skill, technickou dovednost pokrývající rozvržení povinných souborů a nástroje monorepozitáře pro každého, kdo na něm pracuje. Obě leží v kořeni kanonického monorepozitáře.

Řešení potíží

Komponenta se vykreslí, ale vypadá nenastylovaně

To je bezhlavost fungující tak, jak má — s komponentou nepřichází žádné CSS. Buď napište CSS pro třídu komponenty v kebab-case (zobrazenou na každé stránce katalogu) nebo odkažte jeden z 57 hotových motivů.

Moje CSS se na motivu zřejmě neuplatňuje

Mělo by — selektory motivů jsou obaleny v :where(...), které má nulovou specifičnost. Pokud pravidlo přesto prohrává, zkontrolujte, zda se váš stylopis načítá po <link> motivu a zda selektor skutečně odpovídá háčku třídy komponenty.

pnpm install selhává s chybou peer nebo verze

Použijte aktuální pnpm (v10+) a Node 22+. Každý podprojekt připíná verze svého frameworku ve vlastním package.json; pokud je váš globální nástrojový řetězec starší, pnpm env use --global lts je nejrychlejší oprava.

Čtečka obrazovky oznamuje špatný název ovládacího prvku

Zkontrolujte povinnou vlastnost label komponenty — komponenty bez viditelného textu ji vyžadují a konzumentem dodané aria-label / aria-labelledby předané přes rest-props záměrně vyhrávají nad vestavěným propojením. Každá stránka katalogu dokumentuje smlouvu ARIA komponenty.

Pomocník theme-picker nepřepíná stylopisy

Ověřte, že themesUrl ukazuje na adresář, který prohlížeč dokáže načíst (servírujte soubory themes/ jako statické zdroje) a že zkratky motivů ve vaší vlastnosti themes odpovídají názvům souborů. Pomocník vyměňuje href jednoho spravovaného <link data-lily-theme-picker> — prohlédněte si ho ve vývojářských nástrojích a uvidíte požadované URL.

Něco jiného je rozbité

Otevřete issue s minimální reprodukcí na github.com/LilyDesignSystem/lily-design-system — nebo viz komunita a podpora.

Přispívání

Lily je mladý a vítá spolupráci. Nejužitečnější příspěvky právě teď jsou:

  • Nové komponenty (zejména vzory z zavedených návrhových systémů).
  • Nové motivy — každý je jeden samostatný stylopis, dobře vymezený první PR.
  • Lepší stylování příkladů — ukažte, co je možné.
  • Překlady řetězců ukázkových aplikací.
  • Hlášení chyb s minimální reprodukcí.
  • Audity přístupnosti se čtečkami obrazovky a asistivními technologiemi.

Otevírejte issue a PR na github.com/LilyDesignSystem/lily-design-system.

Komunita a podpora

FAQ

Proč bezhlavé, a ne nastylované?

Předstylované komponenty jsou pohodlné — dokud nesedí k vaší značce. Bezhlavé komponenty vyžadují zpočátku trochu víc práce, ale dávají vám plnou kontrolu nad vizuálním návrhem. Ukázkové aplikace a 57 motivů ukazují způsoby, jak je stylovat; můžete je převzít, nebo úplně nahradit. Delší argument je na Proč Lily.

Proč tolik komponent?

Lily se snaží pokrýt vzory, které potřebuje většina aplikací, aniž by vás nutil stavět je od nuly — včetně hlubších věcí, jako jsou vstupy pro národní identifikátory a redakční scrollytelling. Katalog čerpá z tuctu zavedených návrhových systémů plus původní práce — viz O projektu.

Mohu používat Lily s Tailwindem?

Ano. Každá komponenta zpřístupňuje jednu kořenovou třídu v kebab-case plus konzumentem dodané className / class. Navrstvěte utility Tailwindu, jak chcete.

Mohu používat Lily se sémantickými CSS frameworky jako DaisyUI?

Ano. Názvy tříd v kebab-case na kořenovém prvku fungují jako sémantické háčky CSS. Spárujte Lily se sémantickým frameworkem a získáte předstylované komponenty, které přesto respektují ARIA a i18n.

Existuje balíček npm?

Pomocníci pro předvolby jsou dodáváni jako balíčky s publikačním řetězcem npm/NuGet. Bezhlavé knihovny komponent jsou navrženy tak, aby se klonovaly nebo vendorovaly — dodávkou je zdrojový kód, takže můžete číst, zkracovat a vlastnit přesně to, co nasazujete. Publikace bezhlavých knihoven do registrů zůstává v plánu.

Proč více licencí?

Různé projekty mají různé licenční potřeby. BSD a MIT jsou permisivní, Apache-2.0 obsahuje patentové udělení a možnosti GPL podporují copyleft. Vyberte, co vyhovuje vaší situaci.

Jak nahlásit chybu nebo požádat o funkci?

Otevřete issue v repozitáři GitHub, nebo pošlete e-mail na joel@joelparkerhenderson.com.