Lily کے ساتھ آغاز
ایک فریم ورک چنیں، headless ریپو یا مثالی ایپ کلون کریں، اور اپنے صفحات خود ترتیب دینا شروع کریں۔ رہنمائی والا راستہ پسند ہے؟ ٹیوٹوریلز سے شروع کریں۔
انسٹالیشن
Lily ہر فریم ورک کے لیے الگ Git ریپوز کے طور پر شائع ہوتا ہے۔ اسے آزمانے کا تیز ترین طریقہ اپنے سٹیک کا headless ریپو کلون کرنا ہے:
git clone https://github.com/LilyDesignSystem/lily-design-system-react-headless
cd 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
headless لائبریریاں کلون یا شامل کرنے کے لیے بنائی گئی ہیں — سورس کو حقیقت کا ماخذ سمجھیں اور جو چاہیے نقل کریں۔ ترجیحات کے معاونین اس کے علاوہ انسٹال ہونے والے پیکیجز کے طور پر بھی ملتے ہیں، بلڈ اور اشاعتی پائپ لائن کے ساتھ (JS فریم ورکس کے لیے npm، Blazor کے لیے NuGet)۔
headless کمپوننٹ استعمال کریں
headless کمپوننٹس معنوی HTML، ARIA، اور پراپرٹیز کے ساتھ آتے ہیں — مگر کوئی CSS نہیں۔ یہ ہر فریم ورک میں ایک بٹن ہے:
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-svelte-sveltekit-examples
cd 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 45 خود مختار حوالہ تھیمز کے ساتھ آتا ہے، جو themes/ ڈائریکٹری میں ہیں۔ ہر ایک ایک سٹائل شیٹ ہے جو Lily کے کلاس ہُکس کو ہدف بناتی ہے — اسے جوڑیں اور سٹائل لگ جاتا ہے:
<link rel="stylesheet" href="/assets/themes/united-kingdom-government-digital-service.css" />
یہ مجموعہ شامل کرتا ہے:
- عوامی شعبہ — NHS England، NHS Scotland، اور NHS Wales (ہر ایک مریضوں اور معالجین کے لیے الگ انداز میں)، GOV.UK GDS، اور امریکی ویب ڈیزائن سسٹم۔
- فروخت کنندگان سے متاثر — Adobe Spectrum، Mozilla Protocol۔
- عمومی مقصد — ہلکی، گہری، nord، dracula، wireframe، اور تیس کے قریب مزید۔
تھیم سلیکٹرز :where(...) استعمال کرتے ہیں، اس لیے خصوصیت میں آپ کی اپنی CSS ہمیشہ جیتتی ہے۔ چلتے وقت تبدیلی کے لیے انہیں نیچے والے theme-picker معاون کے ساتھ جوڑیں، یا تھیمنگ ٹیوٹوریل کی پیروی کریں۔
ترجیحات کے معاونین
ہر فریم ورک کا ایک ساتھی *-helpers کیٹلاگ ہے جس میں آٹھ چھوٹے انتخاب کنندگان ہیں (اور ایک picker-bar جو انہیں جمع کرتا ہے)۔ ہر ایک headless آئیکن بٹن ہے جو پاپ اپ کھولتا ہے — اختیارات کی فہرست، لنکس کی فہرست، تلاش کا فارم، یا (date-time-picker کے لیے) تاریخ منتخب کرنے کا ڈائیلاگ — مقامی <select> نہیں؛ SSR کے لیے محفوظ ہے؛ اور کوئی CSS نہیں دیتا:
- theme-picker — ایک منظم
<link>بدل کر چلتے وقت تھیم سٹائل شیٹس لوڈ کرتا ہے، دستاویز پرdata-themeمقرر کرتا ہے، اور اختیاری طور پرlocalStorageمیں محفوظ کرتا ہے۔ - locale-picker —
langاورdirمقرر کرتا ہے (دائیں سے بائیں تحریر کی خودکار شناخت کے ساتھ) تاکہ آپ کی 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-svelte-helpers
Svelte کیٹلاگ معیاری حوالہ ہے؛ React، Vue، Angular، HTML، Nunjucks، Web Components، اور Blazor کے پورٹس اس سے معاہدہ بہ معاہدہ ملتے ہیں۔ معاونین کا ٹیوٹوریل دیکھیں۔
رسائی
کمپوننٹس WCAG 2.2 AAA کو ہدف بناتے ہیں۔ وہ ان پیٹرنز کی پیروی کرتے ہیں:
- عمومی
<div>کے بجائے معنوی HTML عناصر۔ - لیبلز کو ان پٹس سے جوڑنے والا
<label for="id">۔ - باہمی حوالوں کے لیے
aria-labelledby/aria-describedby۔ - غلطی کی حالتوں کے لیے
aria-invalid+aria-errormessage۔ - متحرک مواد کے لیے
role="alert"اورaria-live۔ - حالت کے لیے
aria-pressed،aria-expanded،aria-current۔ - گرڈز کے لیے گھومتا ہوا
tabindex۔
فوکس کے اشارے دانستہ صارف کی طرف سے فراہم کیے جاتے ہیں — Lily کبھی طے شدہ فوکس رِنگ نہیں بناتا جو آپ کے ڈیزائن سے ٹکرائے۔ مثالی ایپس اپنے تمام روٹس پر axe-core کی صاف بنیادی سطح برقرار رکھتی ہیں۔
بین الاقوامی کاری
ہر لیبل، پلیس ہولڈر، غلطی کا پیغام، اور بٹن کا متن ایک پراپرٹی ہے۔ کوئی سخت لکھی ہوئی سٹرنگ نہیں۔ اپنی پسند کا ترجمے کا فریم ورک شامل کریں — Paraglide، i18next، vue-i18n، react-intl، .resx فائلیں، کچھ بھی۔
تاریخوں، اعداد، اور کرنسیوں کے لیے کمپوننٹس پہلے سے فارمیٹ شدہ سٹرنگز قبول کرتے ہیں: آپ Intl.DateTimeFormat / Intl.NumberFormat / اپنی پسند کی لائبریری سے فارمیٹ کرتے ہیں اور نتیجہ دے دیتے ہیں۔
locale-picker معاون دستاویز کی جڑ پر lang اور dir مقرر کر کے آپ کی i18n لائبریری کو منتخب کردہ لوکیل کا اشارہ دیتا ہے۔
ٹیسٹنگ
ہر فریم ورک کا ذیلی منصوبہ اپنے مخصوص سٹیک کے ساتھ اپنے ٹیسٹ فراہم کرتا ہے:
- 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 رسائی کی بنیادی سطحیں، اور جوابدہ ویو پورٹ کی جانچ شامل کرتی ہیں۔
AI ایجنٹس
یہ سائٹ اپنی جڑ پر llms.txt اور llms.json شائع کرتی ہے — اپنے اہم ترین صفحات کا ایک منتخب نقشہ، ہر اس ٹول کے لیے جو llms.txt کی روایت کی پیروی کرتا ہے۔
معیاری مونو ریپو اس کے علاوہ دو Claude مہارتیں بھی فراہم کرتا ہے: lily-design-system-skill، ایک عمومی مقصد کی مہارت جو نظام کے ساتھ بنانے والوں کے لیے Lily کے تصورات، اصطلاحات، اور ترتیب کے پیٹرنز کا احاطہ کرتی ہے، اور lily-design-system-maintainer-skill، ایک تکنیکی مہارت جو اس پر کام کرنے والوں کے لیے مونو ریپو کی لازمی فائلوں کی ترتیب اور اوزار کا احاطہ کرتی ہے۔ دونوں معیاری مونو ریپو کی جڑ میں موجود ہیں۔
مسائل کا حل
کمپوننٹ رینڈر ہوتا ہے مگر بغیر سٹائل کے لگتا ہے
یہ headless کا مقصود کے مطابق کام کرنا ہے — کمپوننٹ کے ساتھ کوئی CSS نہیں آتی۔ یا تو کمپوننٹ کی kebab-case کلاس کے لیے CSS لکھیں (جو ہر کیٹلاگ صفحے پر دکھائی گئی ہے) یا 45 تیار تھیمز میں سے کوئی جوڑیں۔
میری CSS تھیم کے اوپر لاگو ہوتی نظر نہیں آتی
ہونی چاہیے — تھیم سلیکٹرز :where(...) میں لپٹے ہیں، جس کی خصوصیت صفر ہے۔ اگر پھر بھی کوئی اصول ہار جائے تو دیکھیں کہ آپ کی سٹائل شیٹ تھیم کے <link> کے بعد لوڈ ہوتی ہے اور سلیکٹر واقعی کمپوننٹ کے کلاس ہُک سے ملتا ہے۔
pnpm install پیئر یا ورژن کی غلطی کے ساتھ ناکام ہوتا ہے
موجودہ pnpm (v10+) اور Node 22+ استعمال کریں۔ ہر ریپو اپنے فریم ورک کے ورژن package.json میں طے کرتا ہے؛ اگر آپ کا عالمی ٹول چین پرانا ہے تو pnpm env use --global lts تیز ترین حل ہے۔
سکرین ریڈر کنٹرول کا غلط نام بتاتا ہے
کمپوننٹ کی لازمی label پراپرٹی دیکھیں — جن کمپوننٹس میں نظر آنے والا متن نہیں ہوتا انہیں یہ درکار ہوتی ہے، اور صارف کے فراہم کردہ aria-label / aria-labelledby جو باقی پراپس کے ذریعے گزارے جاتے ہیں دانستہ طور پر شامل تاروں پر غالب رہتے ہیں۔ ہر کیٹلاگ صفحہ کمپوننٹ کا ARIA معاہدہ دستاویز کرتا ہے۔
theme-picker معاون سٹائل شیٹس نہیں بدلتا
تصدیق کریں کہ themesUrl ایسی ڈائریکٹری کی طرف اشارہ کرتا ہے جسے براؤزر حاصل کر سکے (themes/ فائلیں سٹیٹک اثاثوں کے طور پر فراہم کریں) اور آپ کی themes پراپرٹی میں تھیم سلگ فائل کے ناموں سے ملتے ہیں۔ معاون ایک منظم <link data-lily-theme-picker> کا href بدلتا ہے — ڈیوٹولز میں اسے دیکھیں کہ کون سا URL مانگا جا رہا ہے۔
کچھ اور ٹوٹا ہوا ہے
متعلقہ ریپو پر github.com/LilyDesignSystem میں کم از کم دوبارہ پیدا کرنے کی مثال کے ساتھ ایشو کھولیں — یا برادری اور معاونت دیکھیں۔
حصہ ڈالنا
Lily نوجوان ہے اور تعاون کا خیر مقدم کرتا ہے۔ اس وقت سب سے مفید حصے یہ ہیں:
- نئے کمپوننٹس (خاص طور پر قائم شدہ ڈیزائن سسٹمز کے پیٹرن)۔
- نئے تھیمز — ہر ایک ایک خود مختار سٹائل شیٹ، ایک اچھی طرح محدود پہلا پل ریکویسٹ۔
- مثالوں کی بہتر سٹائلنگ — دکھائیں کہ کیا ممکن ہے۔
- مثالی ایپس کی سٹرنگز کے ترجمے۔
- کم از کم دوبارہ پیدا کرنے کی مثال کے ساتھ خرابی کی رپورٹس۔
- سکرین ریڈرز اور معاون ٹیکنالوجی کے ساتھ رسائی کے آڈٹ۔
متعلقہ ریپو پر github.com/LilyDesignSystem میں ایشوز اور پل ریکویسٹس کھولیں۔
برادری اور معاونت
- سوالات اور خرابی کی رپورٹس — متعلقہ ریپو پر github.com/LilyDesignSystem میں ایشو کھولیں۔
- ای میل — نگہبان joel@joelparkerhenderson.com پڑھتا ہے اور تعاون، رہنمائی، اور آراء کا خیر مقدم کرتا ہے۔
- آئینے — Lily کو Codeberg اور GitLab پر بھی بھیجا جاتا ہے، تاکہ آپ اپنی پسند کے پلیٹ فارم سے شریک ہو سکیں۔
- طرزِ عمل — منصوبہ ایک معیاری ضابطۂ اخلاق کی پیروی کرتا ہے؛ مہربان رہیں، نیک نیتی فرض کریں۔
عمومی سوالات
سٹائل شدہ کے بجائے headless کیوں؟
پہلے سے سٹائل شدہ کمپوننٹس آسان ہوتے ہیں — جب تک وہ آپ کے برانڈ سے نہ ملیں۔ headless کمپوننٹس میں شروع میں تھوڑا زیادہ کام ہے مگر وہ بصری ڈیزائن پر مکمل اختیار دیتے ہیں۔ مثالی ایپس اور 45 تھیمز انہیں سٹائل کرنے کے طریقے دکھاتے ہیں؛ آپ انہیں لے سکتے ہیں یا مکمل بدل سکتے ہیں۔ تفصیلی دلیل Lily کیوں میں ہے۔
اتنے زیادہ کمپوننٹس کیوں؟
Lily ان پیٹرنز کا احاطہ کرنا چاہتا ہے جن کی زیادہ تر ایپس کو ضرورت ہوتی ہے، آپ کو انہیں شروع سے بنانے پر مجبور کیے بغیر — بشمول قومی شناخت کنندہ ان پٹس اور ادارتی سکرولی ٹیلنگ جیسے گہرے معاملات۔ کیٹلاگ ایک درجن قائم شدہ ڈیزائن سسٹمز اور اصل کام سے لیا گیا ہے — تعارف دیکھیں۔
کیا میں Lily کو Tailwind کے ساتھ استعمال کر سکتا ہوں؟
جی ہاں۔ ہر کمپوننٹ ایک kebab-case روٹ کلاس کے ساتھ صارف کا فراہم کردہ className / class ظاہر کرتا ہے۔ Tailwind یوٹیلیٹیز کو جیسے چاہیں اوپر تہہ در تہہ لگائیں۔
کیا میں Lily کو DaisyUI جیسے معنوی CSS فریم ورکس کے ساتھ استعمال کر سکتا ہوں؟
جی ہاں۔ روٹ عنصر پر kebab-case کلاس نام معنوی CSS ہُکس کے طور پر کام کرتے ہیں۔ Lily کو معنوی فریم ورک کے ساتھ جوڑیں اور آپ کو پہلے سے سٹائل شدہ کمپوننٹس ملتے ہیں جو پھر بھی ARIA اور i18n کا احترام کرتے ہیں۔
کیا npm پیکیج ہے؟
ترجیحات کے معاونین npm/NuGet اشاعتی پائپ لائن کے ساتھ پیکیجز کے طور پر ملتے ہیں۔ headless کمپوننٹ لائبریریاں کلون یا شامل کرنے کے لیے بنائی گئی ہیں — سورس ہی حاصل شدہ چیز ہے، تاکہ آپ جو جاری کرتے ہیں اسے عین پڑھ سکیں، چھانٹ سکیں، اور اس کے مالک ہوں۔ headless لائبریریوں کی رجسٹری میں اشاعت روڈ میپ پر باقی ہے۔
متعدد لائسنس کیوں؟
مختلف منصوبوں کی لائسنس کی ضروریات مختلف ہوتی ہیں۔ BSD اور MIT اجازت دینے والے ہیں، Apache-2.0 میں پیٹنٹ کی گرانٹ ہے، اور GPL کے اختیارات کاپی لیفٹ کی معاونت کرتے ہیں۔ جو آپ کی صورتِ حال کے مطابق ہو چنیں۔
میں خرابی کی رپورٹ یا فیچر کی درخواست کیسے کروں؟
متعلقہ GitHub ریپو پر ایشو کھولیں، یا joel@joelparkerhenderson.com کو ای میل کریں۔