Първи стъпки с Lily
Изберете фреймуърк, клонирайте монорепото и отворете неговата безглава библиотека или примерно приложение, и започнете да съставяте собствени страници. Предпочитате воден път? Започнете с уроците.
Инсталиране
Lily живее в едно Git монорепо, с директория за безглавата библиотека, пакетите-помощници и примерното приложение на всеки фреймуърк. Най-бързият начин да го изпробвате е да клонирате монорепото и да отворите безглавата библиотека за вашия стек:
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-react-headless
pnpm install
Същият модел работи и за другите фреймуърци:
@lilydesignsystem/html-headless— не е нужна инсталация; копирайте файловете.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 installlily-design-system-blazor-headless—dotnet build
Безглавите библиотеки са проектирани да бъдат клонирани или включвани в проекта — приемайте изходния код за източник на истината и копирайте каквото ви трябва. помощниците за предпочитания допълнително се доставят като инсталируеми пакети с конвейер за изграждане и публикуване (npm за JS фреймуърците, NuGet за Blazor).
Използване на безглав компонент
Безглавите компоненти предоставят семантичен HTML, ARIA и свойства — но не и CSS. Ето един Button във всеки фреймуърк:
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" }) }}
Използване на стилизиран пример
Примерните приложения включват CSS, маршрути и пълни демо страници. Най-бързият начин за експериментиране е да стартирате примерното приложение на SvelteKit, Next, Nuxt, Analog или Eleventy и да видите демото на /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
След това отворете http://localhost:5173 и разгледайте /components.
Стилизиране и дизайн токени
Всеки компонент се изобразява с един клас в kebab-case на своя коренов елемент. Например, <Button> се изобразява като <button class="button">. Стилизирайте го както желаете:
.button {
background: var(--my-primary);
color: #fff;
padding: 0.75rem 1.5rem;
border-radius: 0.5rem;
}
.button:hover { background: var(--my-primary-hover); }
Палитрата с цветове по подразбиране на Lily (използвана в примерните приложения) е:
- Основен:
#2563eb - Опасност:
#dc2626 - Предупреждение:
#f59e0b - Успех:
#16a34a - Фон на страницата:
#f9fafb - Фон на картата:
#ffffff
Това са предложения, не изисквания. Заменете ги с палитрата на вашата марка и Lily с радост ще ви последва.
Готови теми
Не искате да пишете CSS от нулата? Lily се доставя с 57 самостоятелни референтни теми в директорията themes/ . Всяка е един стилов лист, насочен към куките за клас на Lily — свържете го и сте стилизирани:
<link rel="stylesheet" href="/assets/themes/united-kingdom-government-digital-service.css" />
Наборът обхваща:
- Публичен сектор — NHS England, NHS Scotland и NHS Wales (всяка във варианти за пациенти и за практикуващи), GOV.UK GDS и U.S. Web Design System.
- Вдъхновени от доставчици — Adobe Spectrum, Mozilla Protocol.
- С общо предназначение — light, dark, nord, dracula, wireframe и още трийсетина.
Селекторите на темите използват :where(...), така че вашият собствен CSS винаги печели по специфичност. Съчетайте ги с помощника theme-picker по-долу за превключване по време на изпълнение или следвайте
урока за темите.
Помощници за предпочитания
Всеки фреймуърк има осем малки селектора, всеки собствен пакет
lily-design-system-{framework}-{package} (и един picker-bar , който ги сглобява). Всеки е безглав бутон с икона, който отваря изскачащ прозорец — списъчно поле, списък с връзки, формуляр за търсене или (за date-time-picker) диалог за избор на дата — не родно
<select>; е безопасен за SSR; и не доставя CSS:
-
theme-picker — зарежда стилови листове на теми по време на изпълнение, като сменя управляван
<link>, задаваdata-themeна документа и по желание запазва устойчиво вlocalStorage. -
locale-picker — задава
langиdir(с автоматично откриване на RTL), за да може вашата i18n библиотека да следва; сам не превежда нищо. -
text-size-picker — задава
data-text-sizeна документа; вашият CSS съпоставя всяка стойност с размер на шрифта. -
motion-picker — задава
data-motionна документа, като тръгва от настройката за намалено движение на посетителя; вашият CSS и скриптове решават какво да се потисне. - search-picker — бутон с икона, който отваря поле за търсене; изпращането води до страница за търсене. Притежава действие, не предпочитание.
- link-picker — икона на къща, която отваря меню с връзките към страници, които вашето приложение дефинира (Начало, За нас, Контакти, Политика за поверителност, …). Притежава действие, не предпочитание.
- share-picker — отваря родния лист за споделяне или списък с дестинации, предоставен от потребителя, плюс копиране на URL. Притежава действие, не предпочитание: не прилага нищо, не запазва нищо.
-
date-time-picker — текстово поле плюс диалог за избор на дата по APG за дата, час или и двете. Притежава стойност на формуляр, не предпочитание: низът ISO се преобразува напред-назад в
<input type="date">.
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-svelte-theme-picker
Каталогът на Svelte е каноничната референция; портовете за React, Vue, Angular, HTML, Nunjucks, Web Components и Blazor му съответстват договор по договор. Вижте урока за помощниците.
Достъпност
Компонентите целят WCAG 2.2 AAA. Те следват тези шаблони:
- Семантични HTML елементи вместо общи
<div>s. <label for="id">, които свързват етикетите с полетата за въвеждане.aria-labelledby/aria-describedbyза кръстосани препратки.aria-invalid+aria-errormessageза състояния на грешка.role="alert"иaria-liveза динамично съдържание.aria-pressed,aria-expanded,aria-currentза състояние.- Roving
tabindexза мрежи.
Индикаторите за фокус умишлено се предоставят от потребителя — Lily никога не рисува фокусен пръстен по подразбиране, който да е в конфликт с вашия дизайн. Примерните приложения поддържат чиста база axe-core на всички свои маршрути.
Интернационализация
Всеки етикет, заместител, съобщение за грешка и текст на бутон е свойство. Няма твърдо зададени низове. Включете избрания от вас фреймуърк за превод — Paraglide, i18next, vue-i18n, react-intl, .resx файлове, всичко.
За дати, числа и валути компонентите приемат предварително форматирани низове: вие форматирате с Intl.DateTimeFormat /
Intl.NumberFormat / предпочитаната от вас библиотека и подавате резултата.
Помощникът locale-picker сигнализира избрания локал на вашата i18n библиотека, като задава lang и dir на корена на документа.
Тестване
Всеки подпроект на фреймуърк се доставя със собствени тестове, използващи неговия идиоматичен стек:
- HTML: WebDriverIO, изпълняващ реални браузъри.
- Svelte: Vitest +
@testing-library/svelte. - React: Vitest +
@testing-library/react. - Vue: Vitest +
@testing-library/vue. - Angular: Vitest + TestBed (чрез приставката Vite на Analog).
- Nunjucks: Vitest с помощник за изобразяване.
- Blazor: bUnit.
Тестовете използват само вградените съпоставители на Vitest — никога съпоставителите на
jest-dom . Това запазва наборите от тестове преносими. Примерните приложения добавят набори на Playwright от край до край, бази за достъпност с axe-core и преглед на отзивчиви viewport-ове.
AI агенти
Този сайт публикува llms.txt и llms.json в своя корен — подбрана карта на най-важните си страници, за всеки инструмент, който следва конвенцията llms.txt.
Каноничното монорепо допълнително доставя две
Claude Skills:
lily-design-system-skill: умение с общо предназначение, покриващо понятията, терминологията и шаблоните за съставяне на Lily за всеки, който гради със системата, и lily-design-system-maintainer-skill, техническо умение, покриващо структурата на задължителните файлове и инструментите на монорепото за всеки, който работи по него. И двете са в корена на
каноничното монорепо.
Отстраняване на неизправности
Компонент се изобразява, но изглежда нестилизиран
Това е безглавият режим, работещ по замисъл — с компонента не се доставя CSS. Или напишете CSS за класа на компонента в kebab-case (показан на всяка страница на каталога) или свържете една от 57-те готови теми.
Моят CSS изглежда не се прилага над тема
Би трябвало — селекторите на темите са обвити в :where(...), което има нулева специфичност. Ако правило все пак губи, проверете дали стиловият ви лист се зарежда след <link> на темата и дали селекторът наистина съвпада с куката за клас на компонента.
pnpm install се проваля с грешка за peer или версия
Използвайте актуален pnpm (v10+) и Node 22+. Всеки подпроект фиксира версиите на своя фреймуърк в собствения си package.json; ако глобалната ви верига от инструменти е по-стара, pnpm env use --global lts е най-бързата поправка.
Екранният четец обявява грешно име за контрол
Проверете задължителното свойство label на компонента — компонентите без видим текст изискват такова, а предоставените от потребителя
aria-label / aria-labelledby подадени чрез rest-props умишлено печелят над вградената връзка. Всяка страница на каталога документира договора за ARIA на компонента.
Помощникът theme-picker не превключва стилови листове
Потвърдете, че themesUrl сочи към директория, която браузърът може да извлече (сервирайте файловете themes/ като статични ресурси) и че идентификаторите на темите във вашето свойство themes съвпадат с имената на файловете. Помощникът сменя href на един управляван
<link data-lily-theme-picker> — огледайте го в инструментите за разработчици, за да видите заявявания URL.
Нещо друго е счупено
Отворете issue с минимално възпроизвеждане в github.com/LilyDesignSystem/lily-design-system — или вижте общност и поддръжка.
Принос
Lily е млад и приветства сътрудничество. Най-полезните приноси в момента са:
- Нови компоненти (особено шаблони от утвърдени дизайн системи).
- Нови теми — всяка е един самостоятелен стилов лист, добре очертан първи PR.
- По-добро стилизиране на примерите — покажете какво е възможно.
- Преводи на низовете на примерните приложения.
- Доклади за грешки с минимално възпроизвеждане.
- Одити на достъпността с екранни четци и помощни технологии.
Отваряйте issue и PR в github.com/LilyDesignSystem/lily-design-system.
Общност и поддръжка
- Въпроси и доклади за грешки — отворете issue в github.com/LilyDesignSystem/lily-design-system.
- Имейл — поддържащият чете joel@joelparkerhenderson.com и приветства сътрудничество, насоки и обратна връзка.
- Огледала — Lily се изпраща и към Codeberg и GitLab, за да можете да участвате от форджа, който предпочитате.
- Поведение — проектът следва стандартен кодекс за поведение; бъдете любезни, предполагайте добра воля.
Често задавани въпроси
Защо безглав вместо стилизиран?
Предварително стилизираните компоненти са удобни — докато не се впишат в марката ви. Безглавите компоненти изискват малко повече работа отначало, но ви дават пълен контрол над визуалния дизайн. Примерните приложения и 57-те теми показват начини за стилизиране; можете да ги вземете или да ги замените изцяло. По-дългият аргумент е на Защо Lily.
Защо толкова много компоненти?
Lily цели да покрие шаблоните, от които се нуждаят повечето приложения, без да ви принуждава да ги градите от нулата — включително специфични неща като полета за национални идентификатори и редакционен scrollytelling. Каталогът черпи от дузина утвърдени дизайн системи плюс оригинална работа — вижте За проекта.
Мога ли да използвам Lily с Tailwind?
Да. Всеки компонент излага един коренов клас в kebab-case плюс предоставен от потребителя className / class. Наслагвайте помощните класове на Tailwind както желаете.
Мога ли да използвам Lily със семантични CSS фреймуърци като DaisyUI?
Да. Имената на класове в kebab-case на кореновия елемент работят като семантични CSS куки. Съчетайте Lily със семантичен фреймуърк и получавате предварително стилизирани компоненти, които все пак уважават ARIA и i18n.
Има ли npm пакет?
Помощниците за предпочитания се доставят като пакети с конвейер за публикуване npm/NuGet. Безглавите библиотеки с компоненти са проектирани да бъдат клонирани или включвани в проекта — изходният код е доставяното, така че можете да четете, подрязвате и притежавате точно това, което пускате. Публикуването на безглавите библиотеки в регистри остава в пътната карта.
Защо множество лицензи?
Различните проекти имат различни лицензионни нужди. BSD и MIT са разрешителни, Apache-2.0 има патентно разрешение, а опциите на GPL подкрепят copyleft. Изберете каквото подхожда на ситуацията ви.
Как да докладвам грешка или да поискам функция?
Отворете issue в хранилището на GitHub или пишете на joel@joelparkerhenderson.com.