תחילת העבודה עם 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
הספריות ללא הראש מתוכננות לשכפול או ל-vendoring — התייחסו למקור כאל מקור האמת והעתיקו את מה שאתם צריכים. עוזרי ההעדפות מגיעים בנוסף כחבילות הניתנות להתקנה עם צינור בנייה ופרסום (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 — פותח את חלון השיתוף המקורי או רשימת יעדים שסופקה על ידי הצרכן, ובנוסף העתקת כתובת. מחזיק בפעולה, לא בהעדפה: אינו מחיל דבר, אינו שומר דבר.
-
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 (דרך תוסף Analog Vite).
- Nunjucks: Vitest עם עוזר רינדור.
- Blazor: bUnit.
הבדיקות משתמשות רק בהתאמות המובנות של Vitest — לעולם לא
jest-dom התאמות. כך חבילות הבדיקות נשארות ניידות. אפליקציות הדוגמה מוסיפות חבילות Playwright מקצה לקצה, קווי בסיס נגישות של axe-core וסריקת חלונות תצוגה רספונסיבית.
סוכני בינה מלאכותית
אתר זה מפרסם llms.txt ו- llms.json בשורשו — מפה אצורה של העמודים החשובים ביותר שלו, לכל כלי שעוקב אחר מוסכמת llms.txt.
המונוריפו הקנוני שולח בנוסף שתי
Claude Skills:
lily-design-system-skill, מיומנות לשימוש כללי המכסה את מושגי Lily, המינוח ותבניות ההרכבה עבור כל מי שבונה עם המערכת, ו lily-design-system-maintainer-skill, מיומנות טכנית המכסה את פריסת הקבצים הנדרשת וכלי המונוריפו עבור כל מי שעובד עליו. שתיהן יושבות בשורש
המונוריפו הקנוני.
פתרון בעיות
רכיב מוצג אך נראה לא מעוצב
זה ה-headless שעובד כמתוכנן — שום 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> אחד מנוהל — בדקו אותו ב-devtools כדי לראות את הכתובת המבוקשת.
משהו אחר שבור
פתחו issue עם שחזור מינימלי ב- github.com/LilyDesignSystem/lily-design-system — או ראו קהילה ותמיכה.
תרומה
Lily צעירה ומקבלת בברכה שיתוף פעולה. התרומות השימושיות ביותר כרגע הן:
- רכיבים חדשים (במיוחד תבניות ממערכות עיצוב מבוססות).
- ערכות נושא חדשות — כל אחת היא גיליון סגנון עצמאי אחד, PR ראשון מוגדר היטב.
- עיצוב דוגמאות טוב יותר — הראו מה אפשרי.
- תרגומי מחרוזות של אפליקציות הדוגמה.
- דיווחי באגים עם שחזור מינימלי.
- ביקורות נגישות עם קוראי מסך וטכנולוגיות מסייעות.
פתחו issues ו-PRs ב- github.com/LilyDesignSystem/lily-design-system.
קהילה ותמיכה
- שאלות ודיווחי באגים — פתחו issue ב- github.com/LilyDesignSystem/lily-design-system.
- דוא״ל — המתחזק קורא את joel@joelparkerhenderson.com ומקבל בברכה שיתוף פעולה, הכוונה ומשוב.
- מראות — Lily נדחפת גם אל Codeberg ו- GitLab, כך שתוכלו להשתתף מהפורג׳ שאתם מעדיפים.
- התנהגות — הפרויקט עוקב אחר קוד התנהגות סטנדרטי; היו אדיבים, הניחו תום לב.
שאלות נפוצות
למה ללא ראש ולא מעוצב?
רכיבים מעוצבים מראש נוחים — עד שהם לא תואמים את המותג שלכם. רכיבים ללא ראש דורשים קצת יותר עבודה מראש אך נותנים שליטה מלאה בעיצוב החזותי. אפליקציות הדוגמה ו-57 ערכות הנושא מראות דרכים לעצב אותם; אפשר לקחת אותן או להחליף אותן לחלוטין. הטיעון הארוך יותר נמצא ב למה Lily.
למה כל כך הרבה רכיבים?
Lily שואפת לכסות את התבניות שרוב האפליקציות זקוקות להן בלי לאלץ אתכם לבנות אותן מאפס — כולל נושאים עמוקים כמו קלט מזהים לאומיים וסיפורי גלילה עריכתיים. הקטלוג שואב מתריסר מערכות עיצוב מבוססות ועבודה מקורית — ראו אודות.
האם אפשר להשתמש ב-Lily עם Tailwind?
כן. כל רכיב חושף מחלקת שורש kebab-case אחת בתוספת className / classשסופק על ידי הצרכן. שכבו כלי עזר של Tailwind מעל איך שתרצו.
האם אפשר להשתמש ב-Lily עם מסגרות CSS סמנטיות כמו DaisyUI?
כן. שמות מחלקות ה-kebab-case באלמנט השורש עובדים כווי CSS סמנטיים. צרפו את Lily למסגרת סמנטית וקבלו רכיבים מעוצבים מראש שעדיין מכבדים ARIA ו-i18n.
האם יש חבילת npm?
העוזר עוזרי ההעדפות מגיעים כחבילות עם צינור פרסום npm/NuGet. ספריות הרכיבים ללא ראש מתוכננות לשכפול או ל-vendoring — המקור הוא התוצר, כך שתוכלו לקרוא, לקצץ ולהחזיק בדיוק את מה ששולחים. פרסום ברישום לספריות ללא ראש נשאר במפת הדרכים.
למה מספר רישיונות?
לפרויקטים שונים צרכי רישוי שונים. BSD ו-MIT מתירניים, ל-Apache-2.0 יש הענקת פטנטים, ואפשרויות ה-GPL תומכות ב-copyleft. בחרו את זה שמתאים למצבכם.
איך מדווחים על באג או מבקשים תכונה?
פתחו issue במאגר GitHub, או שלחו מייל אל joel@joelparkerhenderson.com.