Angular টিউটোরিয়াল
Angular 20 স্বাধীন কম্পোনেন্ট — সিগন্যাল ইনপুট, OnPush পরিবর্তন শনাক্তকরণ, ইনলাইন টেমপ্লেট, শূন্য NgModules, শূন্য CSS।
আপনি কী তৈরি করবেন
একটি ছোট যোগাযোগ ফর্ম — লেবেলসহ ক্ষেত্র, জমা দেওয়ার বোতাম, দ্বিমুখী বাইন্ডিং, প্রকৃত কিবোর্ড ও স্ক্রিন-রিডার আচরণ — প্রথমে সাদামাটা, তারপর স্টাইলসহ, প্রায় ১০ মিনিটে।
শুরু করার আগে
আপনার git, Node 22 বা নতুন, এবং pnpm 10 বা নতুন লাগবে। যেকোনো Angular 20 প্রকল্প চলবে — Angular CLI বা Analog।
ধাপ ১ — কোড নিন
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-angular-headless
pnpm install
pnpm test # vitest + TestBed, all 571 components
pnpm run build-storybook
কম্পোনেন্টগুলো এখানে সমতল ফাইল হিসেবে আছে: components/ —
Button.ts, TextInput.ts — প্রতিটি ইনলাইন টেমপ্লেটসহ স্বাধীন কম্পোনেন্ট, সঙ্গে তার spec ও story। ব্যারেল
index.ts প্রতিটি কম্পোনেন্ট পুনরায় রপ্তানি করে; pnpm build
ng-packagr দিয়ে Angular Package Format বান্ডল তৈরি করে।
ধাপ ২ — আপনার প্রথম কম্পোনেন্ট
import { Component } from "@angular/core";
import { Button } from "@lilydesignsystem/angular-headless";
@Component({
selector: "app-save-bar",
standalone: true,
imports: [Button],
template: `<lily-button (click)="save()">Save</lily-button>`,
})
export class SaveBar {
save() { console.log("saved"); }
}
প্রতিটি কম্পোনেন্ট একটি lily-* নির্বাচক ঘোষণা করে এবং তার ক্লাস হুকসহ অর্থবোধক উপাদান দেখায় —
<button class="button" type="button"> এখানে। ইনপুটগুলো সিগন্যালভিত্তিক: label() -এর জন্য aria-label
ওভাররাইড করতে, className() ক্লাস যোগ করতে।
ধাপ ৩ — একটি ছোট ফর্ম তৈরি করুন
import { Component, signal } from "@angular/core";
import { Form, Field, TextInput, Button } from "@lilydesignsystem/angular-headless";
@Component({
selector: "app-contact-form",
standalone: true,
imports: [Form, Field, TextInput, Button],
template: `
<lily-form label="Contact form" (submit)="handleSubmit($event)">
<lily-field label="Full name" [required]="true">
<lily-text-input id="name" label="Full name" [(value)]="name" />
</lily-field>
<lily-button type="submit">Save</lily-button>
</lily-form>
`,
})
export class ContactForm {
name = signal("");
}
lily-field দৃশ্যমান লেবেলকে নিজের
label ইনপুট হিসেবে নেয়, ভেতরে রাখা লেবেল কম্পোনেন্ট হিসেবে নয় — একবার ক্ষেত্রে দিন, আর মিলে যাওয়া lily-text-input-এর
label সহজে ব্যবহারযোগ্য নাম জোগায়। ইনপুটের মতো কম্পোনেন্ট model() মান প্রকাশ করে, তাই banana-box [(value)]
দ্বিমুখী বাইন্ডিং তৎক্ষণাৎ কাজ করে — সর্বত্র zoneless-সামঞ্জস্যপূর্ণ।
২০২৬-০৮-২৯ তারিখে যাচাইকৃত: আগের একটি খসড়া আলাদা Label কম্পোনেন্টকে lily-field-এর ভেতরে রেখেছিল, ফলে দুটি লেবেল (একটি খালি) দেখাত, কারণ
lily-field ইতিমধ্যেই নিজের লেবেল
label ইনপুট থেকে দেখায় — কম্পোনেন্টের সোর্স কোড দেখে ধরা পড়েছে।
সংযুক্ত যোগাযোগ-ফর্ম রুট
একই প্যাটার্ন, প্রকৃত e2e ও axe পরীক্ষায় যাচাই করা।
আপনার কাজ পরীক্ষা করুন: অ্যাপ চালান, আর ফর্মটি সাদামাটা দেখায় — ঠিক যেমন উদ্দেশ্য ছিল: স্টাইলিং এখনো সামনে। চাপুন Tab: ফোকাস প্রতিটি নিয়ন্ত্রণের মধ্য দিয়ে যায়, লেবেল ঘোষিত হয় এবং জমা দেওয়া কাজ করে। আচরণ সম্পূর্ণ; চেহারা আপনার, আর সেটাই পরবর্তী ধাপ।
ধাপ ৪ — স্টাইল দিন
ক্লাস হুকগুলোতে স্টাইল দিন — .button, .text-input,
.label, .field — এতে styles.css, অথবা একটি তৈরি থিম অ্যারেতে যোগ করুন styles -এ
angular.json / এখানে লিংক করুন index.html:
<link rel="stylesheet" href="/themes/adobe-spectrum.css" />
ধাপ ৫ — সবকিছু কাজ করতে দেখুন
Angular + Analog উদাহরণ অ্যাপ ফাইলভিত্তিক রাউটিং ও Vite সহ পূর্ণ ক্যাটালগ দেখায়:
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-angular-examples
pnpm install && pnpm run dev
পরবর্তী ধাপ
- থিম — Angular theme-picker সহায়ক দিয়ে চলার সময় বদল।
- পছন্দ সহায়ক — ভাষা ও লেখার আকার।
- কম্পোনেন্ট ক্যাটালগ — প্রতিটি কম্পোনেন্টের বৈশিষ্ট্য, ARIA ও কিবোর্ড।
পথে প্রশ্ন আছে? সহায়তা পাতা উত্তরে ভরা — আর কোনো ধাপ আরও পরিষ্কার হতে পারলে, আমাদের জানান আর আমরা খুশি মনে টিউটোরিয়াল উন্নত করব।